来源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); }
|