层次遍历二叉树从上到下左往右遍历,需要借助队列来实现
先初始化队列,将根节点压入队列
当队列不为空,先出队,让当前节点指向出队的节点
输出当前节点
如果存在左孩子节点,左孩子入队
如果存在右孩子节点,右孩子入队
实现过程如下所示:
package cn.edu.nwu.tree;
import java.util.LinkedList;
import java.util.Queue;
/**
* @author jcm
*
*时间 2016年9月15日
*/
public class GetTreeNodeLevelTraver {
public static void main(String[] args) {
TreeNode root = CreateBinaryTree.createTreeNode();
System.out.println("递归实现二叉树后续遍历");
levelTraveTreeNode(root);
System.out.println();
System.out.println("非递归实现二叉树后续遍历");
}
/**
* @author jcm
* 分层遍历二叉树(按层次从上往下,从左往右)遍历
* 相当于广度优先搜索,需要借助队列来实现。
* 先初始化队列,将根节点压入队列
* 当队列不为空,先出队,让当前节点指向出队的节点
* 输出当前节点
* 如果存在左孩子节点,左孩子入队
* 如果存在右孩子节点,右孩子入队
* @param root
*/
private static void levelTraveTreeNode(TreeNode root) {
if(root == null){
return;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while(!queue.isEmpty()){
TreeNode current = queue.remove();
System.out.print(current.data+" ");
if(current.leftChild != null){
queue.add(current.leftChild);
}
if(current.rightRight != null){
queue.add(current.rightRight);
}
}
}
}