二叉树的层序遍历:
设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。
层序遍历结果:ABCDEFGHI
实现思路:借助队列实现
- 将根节点入队列;
- 进行出队列操作,同时访问此节点;
- 分别将左右子树入队列;
- 回到步骤2,循环继续执行。(队列为空时循环结束)
代码实现:
import java.util.LinkedList;
import java.util.Queue;
class TreeNode{
char val;
TreeNode left;
TreeNode right;
public TreeNode(char val){
this.val = val;
}
}
public class Test {
public static void levelOrder(TreeNode root){
if(root == null){
return;
}
Queue<TreeNode> queue = new LinkedList<>();
//根节点入队列
queue.offer(root);
while(true) {
TreeNode cur = queue.poll();
if(cur == null){
break;
}
//出队列并访问此节点
System.out.print(cur.val);
//左右子树入队列
if(cur.left != null) {
queue.offer(cur.left);
}
if(cur.right != null) {
queue.offer(cur.right);
}
}
}
public static TreeNode bulid(){
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;
c.left = e;
c.right = f;
d.left = g;
d.right = h;
e.left = i;
return a;
}
public static void main(String[] args) {
TreeNode root = bulid();
levelOrder(root);
}
}
运行结果: