题目描述
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。
示例:
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
思路:
- 二叉树的最大深度等于二叉树的高度,因此可以通过求出二叉树的高度得到最大深度,使用
后序遍历 - 也可以直接求二叉树的最大深度,使用
前序遍历
代码实现
后序遍历
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;
}
结果:
前序遍历
// 记录深度的变量
// 因为前序遍历为:中左右,从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);
}
总结
该题的重点是要弄清楚使用何种遍历方式,遍历方式不同,对应的处理也不同。