Skip to content

Commit 623b35b

Browse files
authored
Merge pull request gzc426#334 from symkmk/master
leetcode_102二叉树的层次遍历
2 parents 4586546 + fab8eab commit 623b35b

File tree

2 files changed

+295
-0
lines changed

2 files changed

+295
-0
lines changed

2018.12.05-leetcode102/妮可.md

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
```java
2+
package sy181205;
3+
4+
import java.util.ArrayList;
5+
import java.util.Arrays;
6+
import java.util.LinkedList;
7+
import java.util.List;
8+
import java.util.Queue;
9+
10+
11+
12+
13+
14+
/**
15+
* @author suyuan
16+
*
17+
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
18+
19+
例如:
20+
给定二叉树: [3,9,20,null,null,15,7],
21+
22+
3
23+
/ \
24+
9 20
25+
/ \
26+
15 7
27+
返回其层次遍历结果:
28+
29+
[
30+
[3],
31+
[9,20],
32+
[15,7]
33+
]
34+
35+
36+
*/
37+
public class leetcode_102二叉树的层次遍历
38+
{
39+
40+
public static void main(String[] args)
41+
{
42+
TreeNode node1=new TreeNode(1);
43+
TreeNode node2=new TreeNode(2);
44+
TreeNode node3=new TreeNode(3);
45+
TreeNode node4=new TreeNode(4);
46+
TreeNode node5=new TreeNode(5);
47+
48+
node1.left=node2;
49+
node1.right=node3;
50+
51+
node2.left=node4;
52+
node2.right=node5;
53+
54+
node3.left=null;
55+
node3.right=null;
56+
57+
node4.left=null;
58+
node4.right=null;
59+
node5.left=null;
60+
node5.right=null;
61+
62+
// List<List<Integer>> resList=levelOrder(node1);
63+
List<List<Integer>> resList=levelOrder3(node1);
64+
for (List<Integer> list : resList)
65+
{
66+
for (Integer integer : list)
67+
{
68+
System.out.print(integer+" ");
69+
}
70+
System.out.println();
71+
}
72+
73+
74+
75+
}
76+
77+
public static List<List<Integer>> levelOrder(TreeNode root)
78+
{
79+
List<List<Integer>> result=new ArrayList<List<Integer>>();
80+
if(root==null)
81+
return result;
82+
Queue<TreeNode> queue=new LinkedList<TreeNode>();
83+
queue.add(root);
84+
TreeNode node=null;
85+
86+
while(!queue.isEmpty())
87+
{
88+
//高度还是要记的...省不了
89+
int count=queue.size();
90+
List<Integer> list=new ArrayList<>();
91+
while(count>0)
92+
{
93+
node=queue.poll();
94+
list.add(node.val);
95+
if(node.left!=null )
96+
queue.add(node.left);
97+
if(node.right!=null)
98+
queue.add(node.right);
99+
count--;
100+
}
101+
102+
result.add(list);
103+
}
104+
105+
return result;
106+
107+
}
108+
109+
//递归实现
110+
public static List<List<Integer>> levelOrder3(TreeNode root) {
111+
List<List<Integer>> res=new ArrayList<>();
112+
if(root==null) return res;
113+
recursionLevelOrder(root,0,res);
114+
return res;
115+
}
116+
private static void recursionLevelOrder(TreeNode root,int level,List<List<Integer>> res){
117+
if(root==null) return;
118+
if(res.size()==level){
119+
List<Integer> subres=new ArrayList<>();
120+
subres.add(root.val);
121+
res.add(subres);
122+
}else{
123+
res.get(level).add(root.val);
124+
}
125+
recursionLevelOrder(root.left,level+1,res);
126+
recursionLevelOrder(root.right,level+1,res);
127+
}
128+
129+
public static List<List<Integer>> levelOrder1(TreeNode root)
130+
{
131+
List<List<Integer>> result=new ArrayList<List<Integer>>();
132+
if(root==null)
133+
return result;
134+
Queue<TreeNode> queue=new LinkedList<TreeNode>();
135+
queue.add(root);
136+
TreeNode node=null;
137+
138+
while(!queue.isEmpty())
139+
{
140+
List<Integer> list=new ArrayList<>();
141+
while(!queue.isEmpty())
142+
{
143+
node=queue.poll();
144+
list.add(node.val);
145+
}
146+
if(node.left!=null && node.right!=null)
147+
queue.add(node.left);
148+
if(node.right!=null && node.right!=null)
149+
queue.add(node.right);
150+
result.add(list);
151+
}
152+
153+
return result;
154+
155+
}
156+
157+
158+
}
159+
160+
class TreeNode {
161+
int val;
162+
TreeNode left;
163+
TreeNode right;
164+
TreeNode(int x) { val = x; }
165+
}
166+
```

2018.12.06-leetcode103/妮可.md

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
```java
2+
package sy181206;
3+
4+
import java.util.ArrayList;
5+
import java.util.Collections;
6+
import java.util.Deque;
7+
import java.util.LinkedList;
8+
import java.util.List;
9+
import java.util.Queue;
10+
11+
12+
13+
14+
15+
/**
16+
* @author suyuan
17+
*
18+
给定一个二叉树,返回其节点值的锯齿形层次遍历。
19+
(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
20+
21+
例如:
22+
给定二叉树 [3,9,20,null,null,15,7],
23+
24+
3
25+
/ \
26+
9 20
27+
/ \
28+
15 7
29+
返回锯齿形层次遍历如下:
30+
31+
[
32+
[3],
33+
[20,9],
34+
[15,7]
35+
]
36+
37+
*/
38+
public class leetcode_103二叉树的锯齿形层次遍历
39+
{
40+
41+
public static void main(String[] args)
42+
{
43+
TreeNode node1=new TreeNode(1);
44+
TreeNode node2=new TreeNode(2);
45+
TreeNode node3=new TreeNode(3);
46+
TreeNode node4=new TreeNode(4);
47+
TreeNode node5=new TreeNode(5);
48+
49+
node1.left=node2;
50+
node1.right=node3;
51+
52+
node2.left=node4;
53+
node2.right=node5;
54+
55+
node3.left=null;
56+
node3.right=null;
57+
58+
node4.left=null;
59+
node4.right=null;
60+
node5.left=null;
61+
node5.right=null;
62+
63+
// List<List<Integer>> resList=levelOrder(node1);
64+
List<List<Integer>> resList=zigzagLevelOrder(node1);
65+
for (List<Integer> list : resList)
66+
{
67+
for (Integer integer : list)
68+
{
69+
System.out.print(integer+" ");
70+
}
71+
System.out.println();
72+
}
73+
74+
}
75+
76+
public static List<List<Integer>> zigzagLevelOrder(TreeNode root)
77+
{
78+
List<List<Integer>> result=new ArrayList<List<Integer>>();
79+
if(root==null)
80+
return result;
81+
Queue<TreeNode> queue=new LinkedList<TreeNode>();
82+
queue.add(root);
83+
TreeNode node=null;
84+
//true从左往右
85+
boolean flag=true;
86+
87+
while(!queue.isEmpty())
88+
{
89+
//高度还是要记的...省不了
90+
int count=queue.size();
91+
List<Integer> list=new ArrayList<>();
92+
while(count>0)
93+
{
94+
node=queue.poll();
95+
list.add(node.val);
96+
if(node.left!=null )
97+
queue.add(node.left);
98+
if(node.right!=null)
99+
queue.add(node.right);
100+
count--;
101+
}
102+
103+
if(flag)
104+
{
105+
result.add(list);
106+
flag=false;
107+
}
108+
else
109+
{
110+
Collections.reverse(list);
111+
result.add(list);
112+
flag=true;
113+
}
114+
115+
}
116+
117+
return result;
118+
}
119+
120+
}
121+
122+
class TreeNode {
123+
int val;
124+
TreeNode left;
125+
TreeNode right;
126+
TreeNode(int x) { val = x; }
127+
}
128+
129+
```

0 commit comments

Comments
 (0)