【LeetCode】Binary Tree Level Order Traversal 解题报告
来源:互联网 发布:网络媒介推广 编辑:程序博客网 时间:2024/05/22 20:39
Binary Tree Level Order Traversal
[LeetCode]
https://leetcode.com/problems/binary-tree-level-order-traversal/
Total Accepted: 70423 Total Submissions: 236710 Difficulty: Easy
Question
Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).
Examples
For example:
Given binary tree {3,9,20,#,#,15,7},3
/ \
9 20
/ \
15 7return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
Ways
方法一
通过直接的每行元素放到一个List中,再把List放到要返回的List中的方法。我的方法中,每个要放的东西使用了两个List,一个放整形的值,一个放这个TreeNode。根据上一层的List来加入这一层的TreeNode。并且要判断,如果为空则不能加入要返回的List中。
/** * 将root先添加到treeList中 * * @param root * @return */ public static List<List<Integer>> getTreeOrder(TreeNode root) { //LeetCode测试时连续的测试,这些static量不能在类中赋值,否则第二次测试时会保留上次结果 //在函数中初始化 treeList = new ArrayList<List<TreeNode>>(); levelList = new ArrayList<TreeNode>(); levelInt = new ArrayList<Integer>(); lists = new ArrayList<List<Integer>>(); level = 0; if (root == null) { return lists; } levelList.add(root); treeList.add(levelList); levelInt.add(root.val); System.out.println("root val:===" + root.val); lists.add(levelInt); getLevelTree(); return lists; } /** * 循环判断添加此外的树枝 */ public static void getLevelTree() { levelList = new ArrayList<TreeNode>(); levelInt = new ArrayList<Integer>(); //如果本层为空,那么没有添加到treeList中,所以加一个treeList.size() == level的判断 if (treeList.size() == level || treeList.get(level).size() == 0) { return; } for (int i = 0; i < treeList.get(level).size(); i++) { if (treeList.get(level).get(i).left == null && treeList.get(level).get(i).right == null) { //是continue 不是 break //因为有可能某一个叶子没有孩子但是,它的兄弟节点有孩子,break之后就不会再判断了 continue; } //不是else if的关系,因为每个都要进行判断 if (treeList.get(level).get(i).left != null) { levelList.add(treeList.get(level).get(i).left); levelInt.add(treeList.get(level).get(i).left.val); System.out.println("left val:===" + treeList.get(level).get(i).left.val); } if (treeList.get(level).get(i).right != null) { levelList.add(treeList.get(level).get(i).right); levelInt.add(treeList.get(level).get(i).right.val); System.out.println("right val:===" + treeList.get(level).get(i).right.val); } } //如果本层为空,那么没有添加到treeList中 if (levelList.size() != 0) { treeList.add(levelList); lists.add(levelInt); } level++; getLevelTree(); }
方法二
**使用队列的方法。
学习了java队列的使用。在一个队列中,放入第一个元素,取出后,放入左右孩子,再根据左右孩子逐个放入其后相应的孩子。队列为空的时候,说明已经遍历完成。
这个方法非常好,学习了。**
/** * 运用栈的方法解决的该问题 * 注意一个栈中,各种方法的区别 * 有些方法失败会报错,有些会进行返回值告诉程序 * * @param root * @return */ public static ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) { ArrayList result = new ArrayList(); if (root == null) { return result; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while (!queue.isEmpty()) { ArrayList<Integer> level = new ArrayList<Integer>(); int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode head = queue.poll(); level.add(head.val); if (head.left != null) { queue.offer(head.left); } if (head.right != null) { queue.offer(head.right); } } result.add(level); } return result; }
Solution
托管在我的GitHub上:
https://github.com/fuxuemingzhu/LevelOrderTraversal
Captures
测试结果截图:
Reference
http://www.jiuzhang.com/solutions/binary-tree-level-order-traversal/
Date
2015/10/13 19:25:00
- [LeetCode]Binary Tree Level Order Traversal II,解题报告
- LeetCode-Binary Tree Level Order Traversal-解题报告
- 【LeetCode】Binary Tree Level Order Traversal 解题报告
- 【LeetCode】Binary Tree Level Order Traversal II 解题报告
- 【LeetCode】 Binary Tree Zigzag Level Order Traversal 解题报告
- LeetCode(102) Binary Tree Level Order Traversal解题报告
- LeetCode(103) Binary Tree Zigzag Level Order Traversal解题报告
- LeetCode(107) Binary Tree Level Order Traversal II解题报告
- [leetcode] 102. Binary Tree Level Order Traversal 解题报告
- [leetcode] 107. Binary Tree Level Order Traversal II 解题报告
- [leetcode] 103. Binary Tree Zigzag Level Order Traversal 解题报告
- 【LeetCode】102. Binary Tree Level Order Traversal 解题报告
- 【LeetCode】107. Binary Tree Level Order Traversal II 解题报告
- 【LeetCode】103. Binary Tree Zigzag Level Order Traversal 解题报告
- LeetCode解题报告 102. Binary Tree Level Order Traversal [easy]
- LeetCode 102. Binary Tree Level Order Traversal 解题报告
- [Leetcode] 102. Binary Tree Level Order Traversal 解题报告
- [Leetcode] 103. Binary Tree Zigzag Level Order Traversal 解题报告
- 【C++】指针&引用的区别
- Oracle-PlSQL程序设计
- Unity接口函数Vector3.Project()
- struts2拦截器问题
- 写代码,请不要中断
- 【LeetCode】Binary Tree Level Order Traversal 解题报告
- 杭电acm--1040
- 侧滑返回功能失效解决
- centos7 matlab install
- linux上应用程序的执行机制
- Rotate Array
- PYTHON数据可视化
- 如何在ROS下编写自己的节点来订阅话题(C++)
- ps