[leetcode]Binary Tree Level Order Traversal
来源:互联网 发布:怎么制作淘宝白底图片 编辑:程序博客网 时间:2024/05/08 17:29
题目描述如下:
Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).
For example:
Given binary tree {3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
本人的解题思路是类似广度优先算法,则使用一个队列,自定义一个新的数据结构包含节点和节点的深度,每一次与当前的深度currtLevel做比较,如果两个值不同,说明当前已经进入到下一层,重新分配空间并把上一个list加入。代码实现如下:
public class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> resList = new ArrayList<List<Integer>>(); // List<Integer> subList = new ArrayList<Integer>(); if(root == null) return resList; Queue<myTreeNode> queue = new LinkedList<>(); myTreeNode theRealRoot = new myTreeNode(root, 0); myTreeNode tmp; List<Integer> tmpList = new ArrayList<Integer>(); queue.add(theRealRoot); int currtLevel = 0; while (!queue.isEmpty()){ tmp = queue.poll(); if(currtLevel != tmp.level){ resList.add(tmpList); List<Integer> subList = new ArrayList<Integer>(); tmpList = subList; tmpList.add(tmp.node.val); currtLevel = tmp.level; }else { int t = tmp.node.val; tmpList.add(tmp.node.val); } if(tmp.node.left != null){ myTreeNode left = new myTreeNode(tmp.node.left, tmp.level + 1); queue.add(left); } if(tmp.node.right != null){ myTreeNode right = new myTreeNode(tmp.node.right, tmp.level + 1); queue.add(right); } } resList.add(tmpList); return resList; } class myTreeNode{ TreeNode node; int level; myTreeNode(TreeNode node, int l){ this.node = node; this.level = l; } }}
实现还是比较繁琐的,用了4ms的时间。
然后看到了一个仅用1ms的实现方法:
public class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<>(); if (root != null) { levelOrderR(root, 0, result); } return result; } public void levelOrderR(TreeNode p, int level, List<List<Integer>> result) { if (p == null) { return; } ArrayList<Integer> current; if (level >= result.size()) { current = new ArrayList<>(); result.add(current); } else { current = (ArrayList<Integer>) result.get(level); } current.add(p.val); levelOrderR(p.left, level + 1, result); levelOrderR(p.right, level + 1, result); }}
利用一个前序遍历来实现,也是用了level进行标记,但不用新定义数据结构,因此不用队列操作,节省大量时间。
题目链接:https://leetcode.com/problems/binary-tree-level-order-traversal/
0 0
- LeetCode[Tree]: Binary Tree Level Order Traversal
- *(leetcode) Binary Tree Level Order Traversal (tree)
- [leetcode][tree] Binary Tree Level Order Traversal
- LeetCode: Binary Tree Level Order Traversal
- LeetCode: Binary Tree Zigzag Level Order Traversal
- LeetCode: Binary Tree Level Order Traversal II
- [LeetCode]Binary Tree Level Order Traversal
- [LeetCode]Binary Tree Level Order Traversal II
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Level Order Traversal
- LeetCode Binary Tree Level Order Traversal II
- LeetCode Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Level Order Traversal
- [Leetcode] Binary Tree Level Order Traversal II
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- Leetcode: Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Level Order Traversal
- LeetCode Binary Tree Level Order Traversal II
- MSM实现tomcat集群中session共享的高可用
- 数据结构与算法小结(1)
- COCOS学习笔记--变速动作Speed和ActionEase
- uva 10288 Coupons 数学期望,分数计算表示
- win10系统下360加速球不显示网速解决方法
- [leetcode]Binary Tree Level Order Traversal
- 战斗框架设计
- 一篇还不错的介绍make的文章
- 解决android 6.0(api 23) SDK,不再提供org.apache.http.*
- ClassNotFoundException: org.apache.jsp.index_jsp
- 测试博客
- 开发工具
- [Apache Kafka]Kafka集成
- UI组件之ListView实现分页