107. Binary Tree Level Order Traversal II

Easy

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]
]
package leetcode.easy;

/**
* Definition for a binary tree node. public class TreeNode { int val; TreeNode
* left; TreeNode right; TreeNode(int x) { val = x; } }
*/
public class BinaryTreeLevelOrderTraversalII {
// DFS solution:
public java.util.List<java.util.List<Integer>> levelOrderBottom1(TreeNode root) {
java.util.List<java.util.List<Integer>> wrapList = new java.util.LinkedList<java.util.List<Integer>>();
levelMaker(wrapList, root, 0);
return wrapList;
} private static void levelMaker(java.util.List<java.util.List<Integer>> list, TreeNode root, int level) {
if (root == null) {
return;
}
if (level >= list.size()) {
list.add(0, new java.util.LinkedList<Integer>());
}
levelMaker(list, root.left, level + 1);
levelMaker(list, root.right, level + 1);
list.get(list.size() - level - 1).add(root.val);
} // BFS solution:
public java.util.List<java.util.List<Integer>> levelOrderBottom2(TreeNode root) {
java.util.Queue<TreeNode> queue = new java.util.LinkedList<TreeNode>();
java.util.List<java.util.List<Integer>> wrapList = new java.util.LinkedList<java.util.List<Integer>>();
if (root == null) {
return wrapList;
}
queue.offer(root);
while (!queue.isEmpty()) {
int levelNum = queue.size();
java.util.List<Integer> subList = new java.util.LinkedList<Integer>();
for (int i = 0; i < levelNum; i++) {
if (queue.peek().left != null) {
queue.offer(queue.peek().left);
}
if (queue.peek().right != null) {
queue.offer(queue.peek().right);
}
subList.add(queue.poll().val);
}
wrapList.add(0, subList);
}
return wrapList;
} @org.junit.Test
public void test() {
TreeNode tn11 = new TreeNode(3);
TreeNode tn21 = new TreeNode(9);
TreeNode tn22 = new TreeNode(20);
TreeNode tn33 = new TreeNode(15);
TreeNode tn34 = new TreeNode(7);
tn11.left = tn21;
tn11.right = tn22;
tn21.left = null;
tn21.right = null;
tn22.left = tn33;
tn22.right = tn34;
tn33.left = null;
tn33.right = null;
tn34.left = null;
tn34.right = null;
System.out.println(levelOrderBottom1(tn11));
System.out.println(levelOrderBottom2(tn11));
}
}

最新文章

  1. AngularJS 分页
  2. SBCL 从REPL 中提取lisp代码
  3. 用Razor做静态页面生成器
  4. ORACLE手工删除数据库
  5. 自行架设DNS的操作步骤及相关说明
  6. BZOJ1631: [Usaco2007 Feb]Cow Party
  7. Xcode Build Setting Reference
  8. cocos2dx-lua绑定自定义c++类(二)
  9. 正确openvSwitch不同种类port认识
  10. DAU新解
  11. PDF之pdfkit
  12. CRM客户关系管理系统(八)
  13. python爬虫实践(二)——爬取张艺谋导演的电影《影》的豆瓣影评并进行简单分析
  14. postman中 form-data、x-www-form-urlencoded、raw、binary的区别--转
  15. git push 失败出现error: src refspec master does not match any.解决方案
  16. SQL语句 怎么把从一个表中查出来数据插入到另一个表中
  17. 对Yii2中 yii\web\User的理解,和自建的app\models\User(基础版),frontend\models\User的应用原理
  18. L2-025 分而治之(图)
  19. vue - nodejs
  20. C++等语言中整型int等的取值范围计算方式

热门文章

  1. Codeforces Round #609 (Div. 2) D. Domino for Young
  2. NodeJS 开发博客(五) 使用express脚手架
  3. AOP(execution表达式)
  4. Django --- 与数据库进行交互
  5. CSP2019 D1T3 树上的数 (贪心+并查集)
  6. 编写一个求圆面积的C语言程序
  7. C# 通过 参数返回 C++ 指针
  8. / WebAPP开发与小程序 / 步骤一 &#183; 4-5 地图搜索与poi结合(2)
  9. WPS-系统缺失字体
  10. 【LGR-059】洛谷7月月赛题解