/**
- 层次遍历(队列)
*/
public void levelOrder(Visitor visitor){
if(root == null || visitor.stop) return;
Queue<Node> queue = new LinkedList<>(); // 队列
queue.offer(root);
while(!queue.isEmpty()){
Node node = queue.poll();
if(visitor.visit(node.element)) return;
if(node.left != null) {
queue.offer(node.left);
}
if(node.right != null) {
queue.offer(node.right);
}
}
}
====================================================================================
/**
- 求树的高度(递归)
*/
pu
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
blic int height() {
return height(root);
}
public int height(Node node) {
if (node == null) return 0;
return 1 + Math.max(height(node.left), height(node.right));
}
/**
- 求树的高度高度(迭代)
*/
public int height() {
if (root == null) return 0;
// 存储每一层的元素数量, root!=null, 则首层必然有1个元素
int levelSize = 1;
int height = 0; // 树的高度
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
Node node = queue.poll();
levelSize–;
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
if (levelSize == 0) { // 即将要访问下一层
levelSize = queue.size(); // 下一层的元素数量
height++;
}
}
return height;
}
==========================================================================================
/**
- 是否是完全二叉树
*/
public boolean isComplete() {
if (root == null) return false;
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
// leaf代表是否要求后面都是叶子节点
// 比如遍历到一个节点 left == null && right == null
// 或者是 left != null && right == null
// 则要求这个节点后面的节点都是叶子节点
boolean leaf = false;
while (!queue.isEmpty()) {
Node node