Nameless Site

But one day, you will stand before its decrepit gate,without really knowing why.

0%

二叉树的层次遍历

来源Leetcode第102题二叉树的层次遍历

给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。

迭代

习惯用栈写,出错了,遍历给出的顺序错了,应该改成队列的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<List<Integer>>();
if (root == null) return ans;

Queue<TreeNode> tree = new LinkedList<TreeNode>();
tree.add(root);
int level = 0;
while ( !tree.isEmpty() ) {
ans.add(new ArrayList<Integer>());
int level_length = tree.size();
for(int i = 0; i < level_length; ++i) {
TreeNode p1 = tree.remove();
ans.get(level).add(p1.val);
if (p1.left != null) tree.add(p1.left);
if (p1.right != null) tree.add(p1.right);
}
level++;
}
return ans;
}

递归

摸了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
levelHelper(res, root, 0);
return res;
}

public void levelHelper(List<List<Integer>> res, TreeNode root, int height) {
if (root == null) return;
if (height >= res.size()) {
res.add(new LinkedList<Integer>());
}
res.get(height).add(root.val);
levelHelper(res, root.left, height+1);
levelHelper(res, root.right, height+1);
}