算法思路
- 将根节点存入队列
- 取出队列首元素,输出节点储存数据
- 检查该节点是否有子节点,有则加入队列
- 只要队列不为空则重复第二,三步
算法实现
二叉树的实现
- 节点类
- 左右子节点的引用
Node<T> left Node<T> right
- 保存的数据
T data
- 重写
toString()方便查看输出结果
class Node<T> {
T data;
Node<T> left = null;
Node<T> right = null;
public Node(T data) {
this.data = data;
}
@Override
public String toString() {
return "" + data;
}
}
- 二叉树类
- 根节点
Node<T> root
- 判断是否为空的方法
isEmpty()
public class CompleteBinaryTree<T> {
Node<T> root;
public boolean isEmpty() {
return root == null;
}
}
具体步骤
- 声明一个队列保存待遍历的节点
Queue<Node<T>> queue = new LinkedList<>();
- 先把根节点加入队列
- 只要队列非空则循环操作
- 弹出队首
queue.remove();并输出数据
- 左右子节点非空则加入队列
public void breadthFirstTravel() {
if (isEmpty()) {
System.out.println("树为空");
return;
}
Queue<Node<T>> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
Node<T> cur = queue.remove();
System.out.println(cur.data);
if (cur.left != null) {
queue.add(cur.left);
}
if (cur.right != null) {
queue.add(cur.right);
}
}
}
测试
测试放到https://www.jianshu.com/p/895b25409f89
完整代码
class Node<T> {
T data;
Node<T> left = null;
Node<T> right = null;
public Node(T data) {
this.data = data;
}
@Override
public String toString() {
return "" + data;
}
}
public class CompleteBinaryTree<T> {
Node<T> root;
public boolean isEmpty() {
return root == null;
}
public void breadthFirstTravel() {
if (isEmpty()) {
System.out.println("树为空");
return;
}
Queue<Node<T>> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
Node<T> cur = queue.remove();
System.out.println(cur.data);
if (cur.left != null) {
queue.add(cur.left);
}
if (cur.right != null) {
queue.add(cur.right);
}
}
}
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。