二叉树的深度

JZ55 二叉树的深度

描述

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

数据范围:节点的数量满足 0≤n≤1000≤n≤100 ,节点上的值满足 0≤val≤1000≤val≤100

进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)

假如输入的用例为

1
{1,2,3,4,5,#,6,#,#,7}

那么如下图:

img

示例1

1
2
输入:{1,2,3,4,5,#,6,#,#,7}
返回值:4

示例2

1
2
输入:{}
返回值:0

题解

初见思路:死去的记忆开始攻击我了,不过言归正传,二叉树相关的最简单的思路就是递归,因为它本身就是一个递归构成的东西,所以只需要从最底层开始向上层层递加,左右子树选择更深的作为本身的深度返回即可。

几个注意点,树叶节点也有left和right指针,但是它们指向空,所以从最底部的空指针开始设深度为0递归就可以了,可以有效避免空指针导致的溢出。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
int TreeDepth(TreeNode* pRoot) {
if (pRoot == nullptr) // 先判断空树
return 0;
int leftDepth = TreeDepth(pRoot->left);
int rightDepth = TreeDepth(pRoot->right);
return std::max(leftDepth, rightDepth) + 1;
}
};