Binary Tree Level Order Traversal II
来源:互联网 发布:python help 函数 编辑:程序博客网 时间:2024/06/07 06:42
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3]]
对树的逆层次遍历。我们不可能从底部往上走,所以我们至顶向下走,不断的在链表前端插入新的一层节点。
public class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { int cnt = 0;int f = 0;int t = 1;int index; List<List<Integer>> lsts = new ArrayList<List<Integer>>();List<Integer> lst = new ArrayList<Integer>();List<TreeNode> nodeList = new ArrayList<TreeNode>();nodeList.add(root);if(root == null){return lsts;}index = 0;while(t != 0){ if(f == t){ t = cnt; f = 0; cnt = 0; lsts.add(0,lst); lst = new ArrayList<Integer>(); } else{ TreeNode node = nodeList.get(index ++); if(node != null){ f ++; lst.add(node.val); } if(node.left != null){ cnt ++; nodeList.add(node.left); } if(node.right != null){ cnt ++; nodeList.add(node.right); } }} return lsts; }}
然而只占胜了23.52%,于是我们选择还是按顺序放入链表,在进行反转。
public class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { int cnt = 0;int f = 0;int t = 1;int index; List<List<Integer>> lsts = new ArrayList<List<Integer>>();List<Integer> lst = new ArrayList<Integer>();List<TreeNode> nodeList = new ArrayList<TreeNode>();nodeList.add(root);if(root == null){return lsts;}index = 0;while(t != 0){ if(f == t){ t = cnt; f = 0; cnt = 0; lsts.add(lst); lst = new ArrayList<Integer>(); } else{ TreeNode node = nodeList.get(index ++); if(node != null){ f ++; lst.add(node.val); } if(node.left != null){ cnt ++; nodeList.add(node.left); } if(node.right != null){ cnt ++; nodeList.add(node.right); } }}int from = 0,to = lsts.size() - 1;while(from < to){List<Integer> tempF = lsts.get(from);List<Integer> tempE = lsts.get(to);lsts.set(from, tempE);lsts.set(to, tempF);from ++;to --;} return lsts; }}
此刻战胜了69.49% 。当然了,自然是可以利用递归解决的,递归也可以解决的。
public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> wrapList = new LinkedList<List<Integer>>(); levelMaker(wrapList, root, 0); return wrapList; } public void levelMaker(List<List<Integer>> list, TreeNode root, int level) { if(root == null) return; if(level >= list.size()) { list.add(0, new LinkedList<Integer>()); } levelMaker(list, root.left, level+1); levelMaker(list, root.right, level+1); list.get(list.size()-level-1).add(root.val); }
这个方案战胜了69.49%
0 0
- LeetCode: Binary Tree Level Order Traversal II
- [LeetCode]Binary Tree Level Order Traversal II
- LeetCode Binary Tree Level Order Traversal II
- [Leetcode] Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- LeetCode Binary Tree Level Order Traversal II
- [LeetCode] Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- 【leetcode】Binary Tree Level Order Traversal II
- [LeetCode]Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- [Leetcode]Binary Tree Level Order Traversal II
- [leetcode]Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- TIME_WAIT状态的连接过多是什么原因?
- MD5算法原理与实现
- 查看oracle的归档日志及空间占用率,清除归档日志
- 数据结构中几种排序算法的整理
- 如何分辨IP地址的类型
- Binary Tree Level Order Traversal II
- 课程设计:小学生考试系统
- RAM ROM and Flash
- Protobuf使用手册
- js文章网站集锦
- 子集和问题
- 菜单对号标记
- 【File】——查找文件夹下所有文件的名称
- redis 安装