持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
二叉树的层次遍历
二叉树的层次遍历过程
一般来说,若二叉树非空,我们可假设它的高度为h,那它的层次遍历的过程如下: 1. 访问根结点,也就是第一层 2. 从左到右访问第二层的所有结点 3. 从左到右访问第h层的所有结点
注:这是一个很好理解的层次遍历,它的遍历过程和我们平时看书一样,从第一行开始从左往右看。
层次遍历算法设计
在二叉树的层次遍历中,对一层的结点访问完后,再按照他们的访问次序对各个结点的左右孩子顺序访问,这样一层一层的进行。这样和队列的先进先出的特点吻合。因此层次遍历采用队列来实现。 - 代码如下 ```java //* *先将根结点b进队,在队为非空时进入循环:从队列中出队一个结点p,访问它;若它有左孩子结点,就将左孩子结点入队,若有右孩子结点则右孩子结点也入队,一直循环,知道队空为止 *// public void LevelOrder(BTreeClass bt){ BTNode q = new LinkedList (); //定义一个队列q //根结点进队 q.offer(bt.b); //队不为空是进入循环 while(!q.isEmpty()){ //出队一个结点 p=q.poll(); //访问p结点 System.out.print(p.data+""); //左孩子不为空进队 if(p.lchild!=null) q.offer(p.lchild); //右孩子不为空进队 if(p.rchild!=null) q.offer(p.rchild); }
} ``` 注:存储使用链式存储队列,因为我们难以估计要遍历的树有多少个结点。层次遍历算法和先序遍历非递归算法非常的相似,只是前者使用队列,后者使用栈来暂存中间数据,得到不同的结果,也正好体现里栈和队列不同的特点。