题目:
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,#,#,15,7}
,
3
/ \
9 20
/ \
15 7
return its bottom-up level order traversal as:
[
[15,7],
[9,20],
[3]
]
题意:
给定一棵二叉树,根据自底向上的层遍历顺序遍历所有的节点(自底向上 自左向右 一层一层的遍历)
算法分析:
同样是利用《Binary Tree Level Order Traversal》的结果,只不过对最终的ArrayList中的元素进行了倒序。《Binary Tree Level Order Traversal》《Binary Tree Zigzag Level Order Traversal》《Binary Tree Level Order Traversal II》以上三道题都是相关的,直接上代码了。
AC代码:
<span style="font-family:Microsoft YaHei;font-size:12px;">/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution
{
private TreeNode root;
public static List<ArrayList<Integer>> levelOrderBottom(TreeNode root)
{
ArrayList<ArrayList<Integer>> first = new ArrayList<ArrayList<Integer>>();
List<ArrayList<Integer>> second = new ArrayList<ArrayList<Integer>>();
first = levelOrder(root);
for(int i=first.size()-1;i>=0;i--)
{
second.add(first.get(i));
}
return second;
}
public static ArrayList<ArrayList<Integer>> levelOrder(TreeNode root)
{
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
if (root == null)
{
return res;
}
ArrayList<Integer> tmp = new ArrayList<Integer>();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root);
int num;
boolean reverse = false;
while (!queue.isEmpty())
{
num = queue.size(); //每次通过这个确定最终的出队数目!!特别好
tmp.clear();
for (int i = 0; i < num; i++) //队列中出1个父,进两个子;出2个父,进4个子;出4个父,进8个子
{
TreeNode node = queue.poll();
tmp.add(node.val);
if (node.left != null)
queue.offer(node.left);
if (node.right != null)
queue.offer(node.right);
}
res.add(new ArrayList<Integer>(tmp));
}
return res;
}
}</span>