java二叉树最短路径之和_[数据结构与算法]求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。...
发布日期:2021-06-24 13:10:23 浏览次数:3 分类:技术文章

本文共 1058 字,大约阅读时间需要 3 分钟。

解题思路:

刚开始想到的就是利用回溯,树的最小深度等于树的左右子树的最小深度+1;

根据这个想法,写出解题算法

public class Solution {

public int run(TreeNode root) {

TreeNode node = root;

//递归的边界条件 如果当前节点为null 高度为0

if(node == null)

return 0;

//递归的边界条件 如果当前节点是叶子节点(左右子树都为null),高度是1

if(node.left == null && node.right == null){

return 1;

}

//否则 左右节点有值 当前节点高度(只看当前节点)为1+ 那个不为null的子树的高度,因此为max

if(node.left == null || node.right == null){

return 1 + Math.max(run(node.left), run(node.right));

}

//最后是都不为空 1+左右子树的最小高度

return 1 + Math.min(run(node.left), run(node.right));

}

}

另一种非递归的方法是层序遍历,从根节点开始,从上往下,利用一个队列存放需要遍历的节点,

代码:

public int run(TreeNode root) {

if(root ==null)

return 0;

Queue queue = new LinkedList<>();

queue.offer(root);

int depth = 0;//当前树的深度

while(!queue.isEmpty()){

int size = queue.size(); //这个地方是关键,获取当前层需要遍历的节点个数

for(int i = 0; i < size; i++){

TreeNode current = queue.poll();

if(current.left == null && current.right == null) //如果左右子树都为空

return 1 + depth;

if(current.left != null){

queue.offer(current.left);

}

if(current.right != null){

queue.offer(current.right);

}

}

depth++;

}

return depth;

}

转载地址:https://blog.csdn.net/weixin_33001305/article/details/114618239 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:安卓r.java有什么用_android R.java文件介绍
下一篇:java代码写xml简单_从Java写入XML文档 – 简单

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月24日 21时58分48秒