二叉树的最大深度

119 阅读1分钟

题目描述

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。

示例:

   3
  / \
 9  20
   /  \
  15   7

返回它的最大深度 3 。

思路:

  1. 二叉树的最大深度等于二叉树的高度,因此可以通过求出二叉树的高度得到最大深度,使用后序遍历
  2. 也可以直接求二叉树的最大深度,使用前序遍历

代码实现

后序遍历

function maxDepth(root: TreeNode | null): number {
    return getDepth(root);
};

//最大深度等于二叉树的高度,因此可以使用后序遍历,通过求出二叉树的高度得到最大深度
function getDepth(node: TreeNode | null): number {
    if(node==null) return 0;

    let leftDepth,rightDepth;
    //左
    leftDepth=getDepth(node.left);
    //右
    rightDepth=getDepth(node.right);
    //中
    let depth=1+Math.max(leftDepth,rightDepth);
    return depth;
}

结果:

image.png

前序遍历

 // 记录深度的变量
 // 因为前序遍历为:中左右,从root节点依次往下走,因此需要记录上一个节点的深度。
let result=1;

function maxDepth(root: TreeNode | null): number {
    getDepth(root,1);
    return result;
};

 function getDepth(node:TreeNode|null,depth:number):number{
     // 将上一次的结果与本次的depth作比较,谁大保留谁
     // 中
     result=result>depth?result:depth;

    if(node.left==null&&node.right==null) return;
     //左
     if(node.left) getDepth(node.left,depth+1);

     // 右
      if(node.right) getDepth(node.right,depth+1);
 }

总结

该题的重点是要弄清楚使用何种遍历方式,遍历方式不同,对应的处理也不同。