您的位置:首页 > 编程语言 > Java开发

107. Binary Tree Level Order Traversal II

2016-02-29 20:08 357 查看
题目:

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]
]


思路:

与102题不同的就是层次的顺序不同,因此可以考虑使用reverse函数或者新建一个Stack作为辅助结构。

代码:

/**
* 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<TreeNode> queue = new ArrayList<>();

//在根节点非空的时候将其加入队列中
if(root != null){queue.add(root);}
while(!queue.isEmpty()){
List<TreeNode> next = new ArrayList<>();
List<Integer> numList = new ArrayList<>();
//通过遍历队列,将每层非空节点依次加入到队列中,并将其整理到数字队列中
for(TreeNode node : queue){
numList.add(node.val);
if(node.left != null){next.add(node.left);}
if(node.right != null){next.add(node.right);}
}
result.add(numList);
queue = next;
}

//最后通过反转函数将result队列的顺序颠倒
Collections.reverse(result);
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java leetcode