二叉树的层序遍历:二叉树自上而下,从左到右依次打印每个节点中存储的数据。
思路:
利用队列先进先出的特性
1、先将根结点入队
while(队列不为空){
1、取出队首元素,并打印该节点
2、将该节点的左孩子入队(如果结点的左孩子不为空)
3、将该节点的右孩子入队(如果结点的右孩子不为空)
}
当队列为空,说明已经按照层序遍历的顺序,遍历了二叉树的所有节点。
示例图:
层序遍历结果:ABCDEFGHI
package java_03_23;
import java.util.LinkedList;
import java.util.Queue;
/**
* @version 1.0
* @Author XuHeng
* @Date 2021/3/23 20:57
*/
//二叉树的深度
public class Tree {
public static TreeNode buildTree() {
// 先构造结点
TreeNode a = new TreeNode('A');
TreeNode b = new TreeNode('B');
TreeNode c = new TreeNode('C');
TreeNode d = new TreeNode('D');
TreeNode e = new TreeNode('E');
TreeNode f = new TreeNode('F');
TreeNode g = new TreeNode('G');
TreeNode h = new TreeNode('H');
TreeNode i = new TreeNode('I');
a.left = b;
a.right = c;
b.left = d;
b.right = null;
c.left = e;
c.right = f;
d.left = g;
d.right = h;
e.left = null;
e.right = i;
f.left = null;
f.right = null;
g.left = null;
g.right = null;
h.left = null;
h.right = null;
i.left = null;
i.right = null;
return a;
}
//层序遍历
public static void levelOrder(TreeNode root){
Queue<TreeNode> queue=new LinkedList<>();
//先将根结点入队
queue.add(root);
while (!queue.isEmpty()){
TreeNode node=queue.remove();
System.out.print(node.val);
if (node.left!=null){
//如果结点的左孩子不为空,入队
queue.add(node.left);
}
if (node.right!=null){
//如果结点的右孩子不为空,入队
queue.add(node.right);
}
}
}
public static void main(String[] args) {
TreeNode root=buildTree();
System.out.println("层序遍历结果:");
levelOrder(root);
}
}