104. 二叉树的最大深度

104. 二叉树的最大深度

给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/   \
15   7
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

信息:
  二叉树,树按层序遍历放于数组,空节点为null,根节点到最远叶子结点

思路:
  满二叉树的节点数num与层数n之间的关系为:num=2^n-1; 则若数组长度大于2^n-1 小于等于2^(n+1)-1,则最大深度为n+1;

var maxDepth = function(root) {
  var length=root.length;
  var result=Math.ceil(Math.log2(length));
  return result;
};

但是真的这么简单吗?显然不是,这个题是用树来解决,数据结构为树,虽然题目是用数组存储,但是却被组成了树,每个元素具有val、left、right属性,那应该怎么做?
最简单的办法:递归

var maxDepth = function(root) {
  if(!root) return 0;
  if(!root.left&&!root.right) return 1;
  if(root.left){
      var leftDepth=maxDepth(root.left)+1;
  }
  if(root.right){
      var rightDepth=maxDepeth(root.right)+1;
  }
  return leftDepth>rightDepth ? leftDepth:rightDepth;
};

以上是递归形式,那非递归形式呢,这就可以用到层序遍历,最大深度就是遍历了多少层。从这也可以得到另外一种方案,即将层序遍历的结果存储到数组中,空节点用null代替,然后用第一种方法来得到最大深度。以下是前面一种方案的代码:

var maxDepth = function(root){
    if(!root) return 0;
    if(!root.left&&!root.right) return 1;
    var depth=1,cur=root;
    var queue=[root,null];
    while((cur=queue.shift()) !== undefined){
      if (cur === null) {
          // 注意⚠️: 不处理会无限循环,进而堆栈溢出
          if (queue.length === 0) return depth;
          depth++;
          queue.push(null);
          continue;
       }
       if(cur.left) queue.push(cur.left);
       if(cur.right) queue.push(cur.right);
    }
    return depth;
}

leetCode分类刷题   该地址长期、每周更新LeetCode分类刷题

参考资料
  leetcode题解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值