java实现二叉树的层次遍历
2018-03-20 14:16
387 查看
昨天面试的时候遇到这个问题,由于太久没有接触算法和数据结构了,导致遗忘的比较彻底,当时记得使用队列的特性可以实现层次遍历的问题,但是自己写的时候却没有很好的利用队列的特性,当时的第一想法是递归,最后写着写着就因为找不到好的出口条件,以及各种分支判断,加上如果有兄弟子树,还要写如何处理这种情况等等,最后反正是写不下去了。
所以今天着重记录一下,如何正确的使用队列的特性去实现二叉树的层次遍历。当然这次的状况也很好的警示:一般情况下,不要使用递归,除非这个递归的出口以及内部条件及其容易做出判断。所以这种东西还是需要经验的积累。
接下来看如何正确实现吧。参考blog
最后放两张图,大致理解一下吧,我就不说了。
所以今天着重记录一下,如何正确的使用队列的特性去实现二叉树的层次遍历。当然这次的状况也很好的警示:一般情况下,不要使用递归,除非这个递归的出口以及内部条件及其容易做出判断。所以这种东西还是需要经验的积累。
接下来看如何正确实现吧。参考blog
public class LevelOrder { public void levelIterator(BiTree root){ if (root == null){ return; } LinkedList<BiTree> queue = new LinkedList<BiTree>(); BiTree current = null; queue.offer(root); // 根节点入队 while (!queue.isEmpty()){ // 只要队列中有元素,就可以一直执行,非常巧妙的利用了队列的特性 current = queue.poll(); // 出队队头元素 System.out.print("-->" + current.data); // 左子树不为空,入队 if (current.leftChild != null) queue.offer(current.leftChild); // 右子树不为空,入队 if (current.rightChild != null) queue.offer(current.rightChild); } } public static void main(String[] args) { BiTree b1 = new BiTree(); b1.setData(1); BiTree b2 = new BiTree(); b2.setData(2); BiTree b3 = new BiTree(); b3.setData(3); BiTree b4 = new BiTree(); b4.setData(4); BiTree b5 = new BiTree(); b5.setData(5); BiTree b6 = new BiTree(); b6.setData(6); BiTree b7 = new BiTree(); b7.setData(7); b1.setLeftChild(b2); b1.setRightChild(b3); b2.setLeftChild(b4); b2.setRightChild(b5); b3.setLeftChild(b6); b3.setRightChild(b7); LevelOrder order = new LevelOrder(); order.levelIterator(b1); } }
最后放两张图,大致理解一下吧,我就不说了。
相关文章推荐
- 二叉树的遍历-先序中序后序层次(java实现)
- 二叉树的建树、遍历(先序、中序、后序、层次)(递归和非递归)--Java实现
- 二叉树的层次遍历 java实现
- java实现二叉树层次遍历
- JAVA语言实现二叉树的层次遍历的非递归算法及递归算法
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归) 层次遍历
- JAVA实现二叉树的遍历的非递归算法及递归算法(前序,中序,后序,层次)
- 二叉树的层次遍历----java实现
- 二叉树建立以及先序、中序、后序、层次遍历(JAVA 实现)
- Java二叉树(一)--定义及前序、中序、后序、层次遍历及求高度的实现
- 数据结构--java实现二叉树的先序、中序、后序、层次遍历及根据先序中序建立二叉树
- 二叉树的层次遍历----java实现
- java 二叉树的实现与先序遍历和层次遍历
- 用java实现二叉树的前序、中序、后序、层次遍历(递归和非递归版)
- 剑指offer之求二叉树的深度(非递归的层次遍历)Java实现
- 二叉树的层次遍历及之形打印算法 Java实现
- 【LintCode-69】二叉树的层次遍历(Java实现)
- java实现二叉树的建立,前中后序遍历,层次遍历,深度,节点个数等
- java 实现二叉树的构建,先序,中序,后序,层次,递归,非递归的遍历
- JAVA语言实现二叉树的层次遍历的非递归算法及递归算法。