Skip to content

Commit 4586546

Browse files
authored
Merge pull request gzc426#333 from Syuan-Cheng/master
syuan
2 parents f06eb0e + 9c96f88 commit 4586546

File tree

2 files changed

+193
-0
lines changed

2 files changed

+193
-0
lines changed

2018.12.05-leetcode102/syuan.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
##### 题目
2+
```
3+
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
4+
5+
例如:
6+
给定二叉树: [3,9,20,null,null,15,7],
7+
8+
3
9+
/ \
10+
9 20
11+
/ \
12+
15 7
13+
14+
返回其层次遍历结果:
15+
16+
[
17+
[3],
18+
[9,20],
19+
[15,7]
20+
]
21+
22+
23+
```
24+
##### 代码
25+
循环
26+
```
27+
/**
28+
* Definition for a binary tree node.
29+
* public class TreeNode {
30+
* int val;
31+
* TreeNode left;
32+
* TreeNode right;
33+
* TreeNode(int x) { val = x; }
34+
* }
35+
*/
36+
class Solution {
37+
public List<List<Integer>> levelOrder(TreeNode root) {
38+
List<List<Integer>> resList=new ArrayList<>();
39+
Queue<TreeNode> queue=new LinkedList<>();
40+
if (root==null) {
41+
return resList;
42+
}
43+
44+
queue.offer(root);
45+
while(!queue.isEmpty()){
46+
int length=queue.size();
47+
List<Integer> tempList=new ArrayList<>();
48+
for (int i=0; i<length; i++) {
49+
if (queue.peek().left!=null) {
50+
queue.offer(queue.peek().left);
51+
}
52+
if (queue.peek().right!=null) {
53+
queue.offer(queue.peek().right);
54+
}
55+
tempList.add(queue.poll().val);
56+
}
57+
resList.add(tempList);
58+
}
59+
return resList;
60+
}
61+
}
62+
```
63+
递归
64+
65+
```
66+
/**
67+
* Definition for a binary tree node.
68+
* public class TreeNode {
69+
* int val;
70+
* TreeNode left;
71+
* TreeNode right;
72+
* TreeNode(int x) { val = x; }
73+
* }
74+
*/
75+
class Solution {
76+
public List<List<Integer>> levelOrder(TreeNode root) {
77+
List<List<Integer>> res = new ArrayList<List<Integer>>();
78+
levelOrderHelper(res, root, 0);
79+
return res;
80+
}
81+
82+
public void levelOrderHelper(List<List<Integer>> res,TreeNode root,int length){
83+
if (root==null) {
84+
return;
85+
}
86+
if (length>=res.size()) {
87+
res.add(new ArrayList<Integer>());
88+
}
89+
res.get(length).add(root.val);
90+
levelOrderHelper(res,root.left,length+1);
91+
levelOrderHelper(res,root.right,length+1);
92+
}
93+
94+
}
95+
```

2018.12.06-leetcode103/syuan.md

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
##### 题目
2+
3+
```
4+
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
5+
6+
例如:
7+
给定二叉树 [3,9,20,null,null,15,7],
8+
9+
3
10+
/ \
11+
9 20
12+
/ \
13+
15 7
14+
15+
返回锯齿形层次遍历如下:
16+
17+
[
18+
[3],
19+
[20,9],
20+
[15,7]
21+
]
22+
```
23+
#### 代码
24+
##### 两个栈
25+
26+
```
27+
class Solution {
28+
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
29+
List<List<Integer>> resList=new ArrayList<>();
30+
Stack<TreeNode> stack1=new Stack<>();
31+
Stack<TreeNode> stack2=new Stack<>();
32+
if (root==null) {
33+
return resList;
34+
}
35+
36+
stack1.push(root);
37+
int index=1;
38+
while(!stack1.isEmpty() || !stack2.isEmpty()){
39+
int length1=stack1.size();
40+
int length2=stack2.size();
41+
List<Integer> tempList=new ArrayList<>();
42+
if (index%2!=0) {
43+
for (int i=0; i<length1; i++) {
44+
if (stack1.peek().left!=null) {
45+
stack2.push(stack1.peek().left);
46+
}
47+
if (stack1.peek().right!=null) {
48+
stack2.push(stack1.peek().right);
49+
}
50+
tempList.add(stack1.pop().val);
51+
}
52+
index++;
53+
}else{
54+
for (int i=0; i<length2; i++) {
55+
if (stack2.peek().right!=null) {
56+
stack1.push(stack2.peek().right);
57+
}
58+
if (stack2.peek().left!=null) {
59+
stack1.push(stack2.peek().left);
60+
}
61+
tempList.add(stack2.pop().val);
62+
}
63+
index++;
64+
}
65+
66+
resList.add(tempList);
67+
}
68+
return resList;
69+
}
70+
}
71+
```
72+
##### 递归
73+
74+
```
75+
class Solution {
76+
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
77+
List<List<Integer>> res=new ArrayList<>();
78+
zigzagLevelOrderHelp(res,root,0);
79+
return res;
80+
}
81+
82+
public void zigzagLevelOrderHelp(List<List<Integer>> res,TreeNode root,int index){
83+
if (root==null) return;
84+
85+
if (res.size()<=index) {
86+
res.add(new ArrayList<>());
87+
}
88+
if (index%2==0) {
89+
res.get(index).add(root.val);
90+
}else{
91+
res.get(index).add(0,root.val);
92+
}
93+
zigzagLevelOrderHelp(res,root.left,index+1);
94+
zigzagLevelOrderHelp(res,root.right,index+1);
95+
}
96+
}
97+
```
98+
> add(index,int) 该函数可以对一个数组进行前序插入 其余的会往后挪动

0 commit comments

Comments
 (0)