【Leetcode】107. Binary Tree Level Order Traversal II
来源:互联网 发布:我要请运营淘宝的 编辑:程序博客网 时间:2024/06/15 07:29
方法一:递归
思路:
(1)若树为空,直接返回result。
(2)先把根节点加如result。
(3)求出左子树自底向上层次遍历的结果left和右子树自底向上层次遍历的结果right。
(4)从后往前依次将left和right的对应层的结果依次加入result。
/** * 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>> result = new ArrayList<List<Integer>>(); if (root == null) return result; List<Integer> temp = new ArrayList<Integer>(); temp.add(root.val); result.add(temp); List<List<Integer>> left = levelOrderBottom(root.left); List<List<Integer>> right = levelOrderBottom(root.right); int leftSize = left.size(); int rightSize = right.size(); int max = Math.max(leftSize, rightSize); int size = Math.abs(leftSize - rightSize); for (int i = max -1; i >= 0; i--) { temp = new ArrayList<Integer>(); if (rightSize > leftSize) { if (i >= size) temp.addAll(left.get(i - size)); temp.addAll(right.get(i)); } else { temp.addAll(left.get(i)); if (i >= size) temp.addAll(right.get(i - size)); } result.add(0, temp); } return result; }}Runtime:63ms
方法二:非递归
思路:
(1)若树为空,则直接返回result。
(2)创建一个队列queue,用于存放所有节点;创建一个列表list记录当前层所有节点的值。
(3)将根节点加入queue。
(4)对每一层,每次获取并移除队列的头结点,即可访问该层的所有节点,对每一个节点,将其值记录到list中,并将其左右孩子加入queue。
(5)每一层处理完毕后,将list加入result的前面。
/** * 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>> result = new ArrayList<List<Integer>>(); if (root == null) return result; Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); while (!queue.isEmpty()) { List<Integer> list = new ArrayList<Integer>(); int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode node = queue.poll(); list.add(node.val); if (node.left != null) queue.add(node.left); if (node.right != null) queue.add(node.right); } result.add(0, list); } return result; }}
Runtime:3ms
1 0
- [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
- 【LeetCode】Binary Tree Level Order Traversal II
- JDBC连接数据库步骤
- leetcode24:Swap Nodes in Pairs
- MySQL 设置远程访问数据库
- Java Spring IoC与AOP 笔记
- 2016个人工作总结
- 【Leetcode】107. Binary Tree Level Order Traversal II
- oracle表约束的操作语法和实例
- 欢迎使用CSDN-markdown编辑器
- js判断文件格式及大小
- ansj 分词系统的词性说明
- java代码获取jvm和heap的内存参数
- iOS-UIWebview相关
- iOS开源项目、三方插件等收集
- Hamming Distance