《恋上数据结构第1季,java多线程面试

/**

  • 层次遍历(队列)

*/

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);

}

}

}

求二叉树的高度: height()

====================================================================================

递归实现


/**

  • 求树的高度(递归)

*/

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;

}

是否为完全二叉树: isComplaete()

==========================================================================================

/**

  • 是否是完全二叉树

*/

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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值