剑指Offer——二叉树的深度

题目描述

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

解题思路

这道题可以利用递归的思想:
1、只有一个根节点,深度为1;
2、如果根节点只有一颗子树,深度为子树+1。
3、如果根节点有两颗子树,深度就为两颗子树深度大的+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)
            {
                int left=TreeDepth(root.left);
                int right=TreeDepth(root.right);
                return right>left ? right+1 : left+1;
            }
            return 0;

        }
}

7/29二刷

最大深度,一定是左子树深度或者右子树深度其中最大的+1,我们就直接写一个递归,让这个递归去寻找,我们不关心过程,只关系结果,终止条件就是null的时候,返回0。
第二种方法bfs,类似层次遍历,我们需要在遍历的过程中,维护一下每一层的关系,保证一层结束后,深度+1.
参考代码

/**
 * @author 超厉害的我啊
 * @date 2020/7/29 00:11:16
 * 二叉树的最大深度
 *     3
 *    / \
 *   9  20
 *     /  \
 *    15   7
 *    size就是1、2、2,在这里好好理解一下。
 *
 */

public class d7_28 {


      public class TreeNode {
          int val;
          TreeNode left;
          TreeNode right;
          TreeNode(int x) { val = x; }
      }


    //递归
    public int maxDepth(TreeNode root) {
        if(root==null)
            return 0;
        int left=maxDepth(root.left);
        int right=maxDepth(root.right);
        return Math.max(left,right)+1;
    }

    //bfs
    public int maxDepth2(TreeNode root){
        Queue<TreeNode> queue=new LinkedList<>();
        queue.offer(root);
        int sum=0;
        while (!queue.isEmpty())
        {
            int size=queue.size();
            for (int i = 0; i < size; i++) {//这里不管是for还是while(size--)都是为了控制同一层
                TreeNode node=queue.poll();
                if(node.left!=null)
                    queue.offer(node.left);
                if(node.right!=null)
                    queue.offer(node.right);
            }
            sum++;
        }

        return sum;

    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值