分享两种关于求解二叉树深度的解题思路

第一种直接通过递归来遍历(在递归时我们不需要考虑所有的节点只需要考虑这一次递归就可以了,并且考虑通过这一次递归会向上一次递归返回的值是什么)
根据这一想法我们可以得到,既然要求我们遍历二叉树我们只需要关注这一步该怎么做,无非就是根节点有没有左右子树,然后想这一次遍历对上一次遍历有什么影响。有了左右子树那么就可以判断这一次遍历的结果左子数是1(存在左子树),或者右子树(存在右子树)是1,当然就分析出来对上一次的影响就是是不是要加一喽,这样我们就把一个个大的问题细小化了,也就把问题解决了。
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

public TreeNode(int val) {
    this.val = val;

}

}
/
public class Solution {
public int TreeDepth(TreeNode root) {
if(root == null){
return 0;
}
return Math.max(TreeDepth(root.left),TreeDepth(root.right))+1;
}
}
第二种通过层序遍历来计算这棵二叉树的深度(即有多少层就可以得出这颗二叉树的深度是多少了)我们定义一个队列来保存一层遍历下来的节点(因为队列的特点是先进先出,就满足了层序遍历从左到右依次遍历节点的特点)
之后通过将队列里的节点出队然后判断这个出队的节点有没有左右子树,依据层序遍历将他们加入到队列之中。定义一个整型的变量只要循环没有退出就让这个变量的值++,之后这个数的深度就是这个变量的值了。
代码如下
/
*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

public TreeNode(int val) {
    this.val = val;

}

}
/
import java.util.
;
public class Solution {
public int TreeDepth(TreeNode root) {
if(root == null){
return 0;
}
Queue queue = new LinkedList<>();
queue.offer(root);
int depth = 0;
while(!queue.isEmpty()){//只要队列不是空我们就可以继续遍历。
depth++;//刚进来就++是因为我们root不为空
int size = queue.size();//每次判断一下队列的大小是多少,目的是知道了我们要出队入队几次才能把这一层的节点遍历完。
for(int i =0;i<size;i++){
TreeNode a = queue.poll();//直接将队列中第一个节点poll出去,并用一个TreeNode类型的变量记录下来,以便于我们判断它有没有左右子树

          if(a.left != null)//如果这个节点有左右子树我们就将它假如队列当中
            queue.offer(a.left);
         
         if(a.right != null)
            queue.offer(a.right);
         
        }
    }
    return depth;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值