Binary Tree Level Order Traversal
来源:互联网 发布:outlook导入mac mail 编辑:程序博客网 时间:2024/06/07 05:24
http://www.lintcode.com/en/problem/binary-tree-level-order-traversal/
题目:给定二叉树,按层级顺序输出。如:二叉树{3,9,20,#,#,15,7}
3 / \ 9 20 / \ 15 7输出:
[ [3], [9,20], [15,7]]
解答:首先判断根节点是否为空,为空直接返回。
将当前根节点放入队列中,当队列不为空时进行以下循环:
1.将队列头取出并记录其值;
2.建立新的arraylist,将取出元素的值放入list中(控制list的长度:queue.size() );
3.将当前取出的元素左右非空子节点加入队列中;
第一次犯错:未判断根节点为空的情况;
代码:
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
// write your code here
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
if (root == null) {
return res;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()){
ArrayList<Integer> row = new ArrayList<>();
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode father = queue.poll();
row.add(father.val);
if (father.left != null) {
queue.offer(father.left);
}
if (father.right != null) {
queue.offer(father.right);
}
}
res.add(row);
}
return res;
}
变题1:http://www.lintcode.com/en/problem/binary-tree-level-order-traversal-ii/
题目:同上,区别是从底层往上层输出;
解答:在以上代码返回前加上:Collections.reverse(res) 即可
变题2:http://www.lintcode.com/en/problem/binary-tree-zigzag-level-order-traversal/
题目:将二叉树按zigzag顺序输出,如:输入{3,9,20,6,#,15,7},输出[ [3], [20, 9], [6,15, 7];
解答:不再使用queue,使用两个stack来完成操作;
代码:
public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {
// write your code here
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
if (root == null) {
return res;
}
Stack<TreeNode> stackCur = new Stack<>();
stackCur.push(root);
boolean order = true;
while (!stackCur.isEmpty()) {
ArrayList<Integer> row = new ArrayList<>();
Stack<TreeNode> stackNext = new Stack<>();
while (!stackCur.isEmpty()) {
TreeNode father = stackCur.pop();
row.add(father.val);
if (order) {
if (father.left != null) {
stackNext.push(father.left);
}
if (father.right != null) {
stackNext.push(father.right);
}
} else {
if (father.right != null) {
stackNext.push(father.right);
}
if (father.left != null) {
stackNext.push(father.left);
}
}
}
res.add(row);
order = !order;
stackCur = stackNext;
}
return res;
}
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Binary Tree Level Order Traversal
- Scala继承层次
- STL空间配置
- VR虚拟现实,你会区分吗?
- Cloudera配置问题
- 堆排序
- Binary Tree Level Order Traversal
- 函数指针的优化
- 菜鸟学DOM解析XML文件
- 如何获取地址栏的参数
- uboot 编译分析(一)mkconfig分析
- 欢迎使用CSDN-markdown编辑器
- struts中返回json
- cordova打包apk
- Xshell终端模拟器如何清除历史记录?