LeetCode 第102题 二叉树的层次遍历
Posted _colorful
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 第102题 二叉树的层次遍历相关的知识,希望对你有一定的参考价值。
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
1 /* 2 思路1 : 用两个链表分别代替两个层次,交替使用 3 */ 4 public List<List<Integer>> levelOrder(TreeNode root) { 5 List<List<Integer>> res = new ArrayList<>(); 6 if (root == null) { 7 return res; 8 } 9 List<TreeNode> list1 = new LinkedList<>(); 10 List<TreeNode> list2 = new LinkedList<>(); 11 list1.add(root); 12 while (list1.size() != 0 || list2.size() != 0) { 13 List<TreeNode> notEmptyList = list1.size() == 0 14 ? list2 15 : list1; 16 List<TreeNode> emptyList = list1.size() == 0 17 ? list1 18 : list2; 19 List<Integer> resList = new LinkedList<>(); 20 while (notEmptyList.size() != 0) { 21 TreeNode temp = notEmptyList.remove(0); 22 resList.add(temp.val); 23 if (temp.left != null) { 24 emptyList.add(temp.left); 25 } 26 if (temp.right != null) { 27 emptyList.add(temp.right); 28 } 29 } 30 res.add(resList); 31 } 32 return res; 33 }
1 /*
2 思路2 : 直接层次遍历
3 */
4 public List<List<Integer>> levelOrder_1(TreeNode root) {
5 List<List<Integer>> res = new ArrayList<>();
6 if (root == null) {
7 return res;
8 }
9 LinkedList<TreeNode> list = new LinkedList<>();
10 list.add(root);
11 int currLevelNodes = 1;
12 while (list.size() != 0) {
13 LinkedList<Integer> resList = new LinkedList<>();
14 currLevelNodes = list.size();
15 for (int i = currLevelNodes; i > 0; --i) {
16 TreeNode removeNode = list.remove();
17 resList.add(removeNode.val);
18 if (removeNode.left != null) {
19 list.add(removeNode.left);
20 }
21 if (removeNode.right != null) {
22 list.add(removeNode.right);
23 }
24 }
25 res.add(resList);
26 }
27 return res;
28 }
1 /*
2 思路3 : 递归层次遍历
3 */
4 public List<List<Integer>> levelOrder_2(TreeNode root) {
5 List<List<Integer>> res = new ArrayList<>();
6 search(root, 0, res);
7 return res;
8 }
9
10 private void search(TreeNode parent, int level, List<List<Integer>> res) {
11 if (parent == null) {
12 return;
13 }
14 if (res.size() <= level) {
15 res.add(new ArrayList<>());
16 }
17 res.get(level).add(parent.val);
18 search(parent.left, level + 1, res);
19 search(parent.right, level + 1, res);
20 }
以上是关于LeetCode 第102题 二叉树的层次遍历的主要内容,如果未能解决你的问题,请参考以下文章