Skip to content

Commit 47b3550

Browse files
committed
589.N叉树的前序遍历
1 parent 8b7878f commit 47b3550

File tree

5 files changed

+83
-7
lines changed

5 files changed

+83
-7
lines changed

leetcode_Java/DoneTitle.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
94. 二叉树的中序遍历
22
102. 二叉树的层序遍历
33
144. 二叉树的前序遍历
4-
145. 二叉树的后序遍历
4+
145. 二叉树的后序遍历
5+
589. N叉树的前序遍历

leetcode_Java/Solution0094.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
* 递归思路:
2323
* 1、定义数据结构:使用列表成员变量,存储每次递归操作存入的值
2424
* 2、递归终止条件:节点为空时返回
25-
* 3、主要数据操作:把节点的值存入列表
25+
* 3、单层递归逻辑:把节点的值存入列表
2626
* 4、递归逻辑:
27-
* 左右节点需要与根节点做同样的事,就要用递归
27+
* 左右节点需要与根节点做同样的事,就要调同样的方法,即递归
2828
* 确定递归顺序/遍历顺序,左中右
2929
* 每层不需要接收使用递归方法返回值,列表成员变量存储了结果
3030
* */

leetcode_Java/Solution0144.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
* 递归思路:
2323
* 1、定义数据结构:使用列表成员变量,存储每次递归操作存入的值
2424
* 2、递归终止条件:节点为空时返回
25-
* 3、主要数据操作:把节点的值存入列表
25+
* 3、单层递归逻辑:把节点的值存入列表
2626
* 4、递归逻辑:
27-
* 左右节点需要与根节点做同样的事,就要用递归
27+
* 左右节点需要与根节点做同样的事,就要调同样的方法,即递归
2828
* 确定递归顺序/遍历顺序,中左右
2929
* 每层不需要接收使用递归方法返回值,列表成员变量存储了结果
3030
* */

leetcode_Java/Solution0145.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
* 递归思路:
2323
* 1、定义数据结构:使用列表成员变量,存储每次递归操作存入的值
2424
* 2、递归终止条件:节点为空时返回
25-
* 3、主要数据操作:把节点的值存入列表
25+
* 3、单层递归逻辑:把节点的值存入列表
2626
* 4、递归逻辑:
27-
* 左右节点需要与根节点做同样的事,就要用递归
27+
* 左右节点需要与根节点做同样的事,就要调同样的方法,即递归
2828
* 确定递归顺序/遍历顺序,左右中
2929
* 每层不需要接收使用递归方法返回值,列表成员变量存储了结果
3030
* */

leetcode_Java/Solution0589.java

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// N叉树的前序遍历
2+
3+
4+
/*
5+
// Definition for a Node.
6+
class Node {
7+
public int val;
8+
public List<Node> children;
9+
10+
public Node() {}
11+
12+
public Node(int _val) {
13+
val = _val;
14+
}
15+
16+
public Node(int _val, List<Node> _children) {
17+
val = _val;
18+
children = _children;
19+
}
20+
};
21+
*/
22+
23+
24+
/*
25+
* 递归思路:
26+
* 1、定义数据结构:使用列表成员变量,存储每次递归操作存入的值
27+
* 2、递归终止条件:节点为空时返回
28+
* 3、单层递归逻辑:把节点的值存入列表
29+
* 4、递归逻辑:
30+
* 子节点需要与根节点做同样的事,就要调同样的方法,即递归
31+
* 确定递归顺序/遍历顺序,中左右,子节点从左到右
32+
* 每层不需要接收使用递归方法返回值,列表成员变量存储了结果
33+
* */
34+
class Solution {
35+
public List<Integer> list = new ArrayList<>();
36+
public List<Integer> preorder(Node root) {
37+
if (root == null) {
38+
return list;
39+
}
40+
list.add(root.val);
41+
for (Node node : root.children) {
42+
preorder(node);
43+
}
44+
return list;
45+
}
46+
}
47+
48+
49+
/*
50+
* 迭代思路:
51+
* 1、定义数据结构:列表存放节点值,栈按序存放节点
52+
* 2、遍历条件、操作逻辑:
53+
* 1)节点入栈顺序决定了节点的遍历顺序,栈的后进先出特点,想实现前序遍历,子节点要从右到左入栈,出栈从左到右操作节点,先存储后操作
54+
* 2)根节点入栈初始化,轮询栈,弹出节点,节点值存入列表,子节点从右到左入栈
55+
* */
56+
class Solution {
57+
public List<Integer> preorder(Node root) {
58+
List<Integer> list = new ArrayList<>();
59+
if (root == null) {
60+
return list;
61+
}
62+
Stack<Node> stack = new Stack<>();
63+
stack.push(root);
64+
while (!stack.isEmpty()) {
65+
root = stack.pop();
66+
list.add(root.val);
67+
List<Node> children = root.children;
68+
Collections.reverse(children);
69+
for (Node node : children) {
70+
stack.push(node);
71+
}
72+
}
73+
return list;
74+
}
75+
}

0 commit comments

Comments
 (0)