剑指offer——从上往下打印二叉树
来源:互联网 发布:知乎学生会主席 编辑:程序博客网 时间:2024/06/05 16:21
1. 问题描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
2. 解决方法
其实这道题就是二叉树的层次遍历。这个在学数据结构的时候就已经考察了。其主要思想就是建立一个队列,然后递归的入队出队即可。
2.1 level1
按照上述思想,如下展示:
ArrayList<Integer> alArrayList=new ArrayList<Integer>(); Queue<TreeNode> queue=new LinkedList<TreeNode>(); public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { Recursive(root); return alArrayList; } public void Recursive(TreeNode root){ if(root==null){ if(!queue.isEmpty()) Recursive(queue.poll()); return ; } else{ alArrayList.add(root.val); queue.add(root.left); queue.add(root.right); Recursive(queue.poll()); } }
2.2 level2
但是这里有一个问题,它需要递归实现,有可能出现栈溢出的问题。因此改用循环实现:
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); if(root==null){ return list; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); while (!queue.isEmpty()) { TreeNode treeNode = queue.poll(); if (treeNode.left != null) { queue.offer(treeNode.left); } if (treeNode.right != null) { queue.offer(treeNode.right); } list.add(treeNode.val); } return list; }
2.3 level3
事实上第一个代码质量不高,第二个仍然依靠了队列,通过递归的手段,完全可以不用队列实现:
ArrayList<Integer> list=new ArrayList<Integer>(); public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { if(root!=null) list.add(root.val); print(root); return list; } public void print(TreeNode root){ if(root!=null){ if(root.left!=null) list.add(root.left.val); if(root.right!=null) list.add(root.right.val); print(root.left); print(root.right); }
3. 小结
本章中我们主要复习了二叉树的层次遍历,也成为广度遍历。其实基础很重要。不知道有没有同学注意到我在两个代码中的队列的添加一个使用了add,一个使用了offer。事实上他们是有区别的:《队列的几个相似的用法》。
阅读全文
0 0
- 《剑指offer》——从上往下打印二叉树
- 剑指offer——从上往下打印二叉树
- 剑指offer——从上往下打印二叉树
- 剑指offer——从上往下打印二叉树
- 剑指offer——从上往下打印二叉树
- 剑指offer—从上往下打印二叉树
- 剑指offer(22)—从上往下打印二叉树
- 剑指offer—从上往下打印二叉树
- 剑指offer代码解析——面试题23从上往下打印二叉树
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
- 剑指offer——面试题23:从上往下打印二叉树
- 剑指Offer——(22)从上往下打印二叉树&&层次遍历
- 剑指offer(23)——从上往下打印二叉树
- 剑指offer——22.从上往下打印二叉树
- 剑指Offer—22—从上往下打印二叉树
- 剑指offer——面试题23:从上往下打印二叉树
- 剑指offer 面试题23—从上往下打印二叉树
- 剑指offer—编程题23(从上往下打印二叉树)
- HDOJ 1166 排兵布阵(线段树)
- Python使用pymysql从MySQL数据库中读出数据
- servlet配置
- JAVA中并发处理
- spring mvc的controller识别同一个form表单的多个submit按钮问题以及相关处理
- 剑指offer——从上往下打印二叉树
- C++:标准C函数(随机数,时间函数)
- java连接到sql2005
- JavaScript笔记(对象)
- matlab曲线拟合工具箱cftool
- Android平台调用so库中函数的流程及一些坑
- 3798: 特殊的质数
- java实例是什么意思
- jsp内置对象