二叉树的深度|递归和队列|java版本

求二叉树的深度
  • 二叉树的深度定义为一颗二叉树的根节点到叶子节点的最长路径和。
  • 本文给出两种方法求解分别是递归和队列
递归
  • 递归首先要定义递归函数的意义
    • 一棵二叉树的深度等于左子树和右子树深度的最大值加上1
  • 代码
public int getDepth(TreeNode root){
        if (root==null) return 0;
        return Math.max(getDepth(root.left),getDepth(root.right))+1;
    }
  • 队列的思路类似于层序遍历
    • 如果我们得到二叉树的层数,我们也就得到了二叉树的高度
    • 我们依次将二叉树的每一层放入队列中
    • 然后遍历队列该层依次出队的同时,将队列的下一层入队
    • 每弹完一层 层数加1
  • 代码
 private int getDepth2(TreeNode root){
        if(root==null) return 0;
        Queue<TreeNode> q = new LinkedList<TreeNode>();
        int dep =0;
        q.offer(root);
        while(!q.isEmpty()){
            int sz = q.size();
            for(int i=0;i<sz;i++){
                TreeNode cur = q.poll();
                if(cur.left!=null) q.offer(cur.left);
                if(cur.right!=null) q.offer(cur.right);
            }
            dep++;
        }
        return dep;
    } 	
二叉树定义
lass TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) {
    	val = x;
    }
}
测试
 public static void main(String[] args) {
        TreeNode root1 = new TreeNode(3);
        root1.left=new TreeNode(9);
        root1.right=new TreeNode(20);
        root1.right.left= new TreeNode(15);
        root1.right.right= new TreeNode(7);
        TreeDep treeDep = new TreeDep();
        System.out.println("方法1树的深度为:"+treeDep.getDepth(root1));
        System.out.println("方法2树的深度为:"+treeDep.getDepth2(root1));
    }
时间复杂度|空间复杂度分析
  • 递归法是一个深度优先搜索(DFS),时间复杂度为O(2n+1)~O(n)
  • 空间复杂度为递归堆栈,O(logn)
  • 队列法是一个BFS,时间复杂度为O(n),BFS的空间复杂度为O(n/2)~O(n)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张小李的风

谢谢老板!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值