leetcode(27).107. Binary Tree Level Order Traversal II
来源:互联网 发布:淘宝卖家申诉入口 编辑:程序博客网 时间:2024/06/05 16:42
题意:给定一个二叉树,反序层次遍历其结点。(从左到右,从下到上)
初步分析:
从左到右是可以的,这没什么,从右到左都只需要调换入队顺序即可。关键是树结点从下到上是找不到的。所以直接从下到上找是不可能的。我们先假定从上到下从右到左的一层一层的搜索。每层返回一个list,这些list如果能反着装进List即可。那么先放入栈中,再取出。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> lists = new ArrayList(); if(root == null) return lists; Stack<List<Integer>> stack = new Stack<List<Integer>>(); Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); while(!queue.isEmpty()) { List<Integer> list = new ArrayList(); int layer = queue.size(); while(layer>0) { TreeNode node = queue.poll(); list.add(node.val); if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); layer--; } stack.push(list); } while(!stack.isEmpty()) { lists.add(stack.pop()); } return lists; }}
当然多出一个循环是不太好的:我们可以不用数组而用链表,每次头插。
List<List<Integer>> lists = new LinkedList<>();
lists.add(0,list);
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> lists = new LinkedList<>(); if(root == null) return lists; Queue<TreeNode> queue = new LinkedList(); TreeNode node = root; queue.add(node); while(!queue.isEmpty()) { List<Integer> list = new ArrayList<>(); int layer = queue.size(); //记录当前层的结点个数 while(layer != 0) //把当前层的结点取出来处理完(不是整个队列处理完),处理完后队列里的结点恰好是下一层所有的结点。 { node = queue.poll(); list.add(node.val); if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); layer--; } lists.add(0,list); } return lists; }}
0 0
- leetcode(27).107. Binary Tree Level Order Traversal II
- [LeetCode]102. Binary Tree Level Order Traversal&107. 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
- [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
- [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
- 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
- 【leetcode】Binary Tree Level Order Traversal II
- 实习总结2
- 视频云面向海量用户的分布式视频处理技术
- Tensorflow从文件读取数据
- 封装iframe对象为jquery 对象
- lua脚本调用redis生成流水号
- leetcode(27).107. Binary Tree Level Order Traversal II
- IOS 仿微信聊天界面
- matlab之plot
- PHP中的类型转换规则
- 数据结构实验之查找二:平衡二叉树
- 尾差法和删除单链表
- 第十二周 项目1 -图基本算法库
- awk nginx日志分析接口响应时间
- win7 64位sql server 2008 r2安装