大家好,又见面了,我是你们的朋友全栈君。
二叉树的层序遍历
下图是一个简单的二叉树例图
实现思路:
1.创建一个队列用于二叉树的层序遍历。
2.将二叉树根节点插入队列中。
3.通过while循环遍历二叉树,直至遍历完整个二叉树后则结束循环。
4.每次循环开始时先进行出队操作,若当前出队元素为null则证明已经完成层序遍历结束循环循环,若不为null则打印该节点的值,并判断该节点是否存在左右子树,若存在则依次插入队列中。
图解上述二叉树的层序遍历过程
依次进行图上操作直至最终队列为空时则层序遍历结束。
实现代码如下:
代码语言:javascript复制class TreeNode{
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
}
}
public class day_0410 {
public static void main(String[] args) {
TreeNode a=new TreeNode(1);
TreeNode b=new TreeNode(2);
TreeNode c=new TreeNode(3);
TreeNode d=new TreeNode(4);
TreeNode e=new TreeNode(5);
TreeNode f=new TreeNode(6);
TreeNode g=new TreeNode(7);
a.left=b;
a.right=c;
b.left=d;
b.right=e;
c.left=f;
c.right=g;
level(a);
}
public static void level(TreeNode root){
if (root==null){
return;
}
Queue<TreeNode> queue=new LinkedList<>();
//将根节点插入队列中
queue.offer(root);
while (true){
//创建一个临时变量cur存储出队元素
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);
}
}
}
}
运行结果如下所示:
如有不足还请指正,谢谢!
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143385.html原文链接:https://javaforall.cn