题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度
思路:求二叉树的深度就是二叉树的遍历过程。其有前序、中序和后序三种。这里不用访问节点值,指的是计数,所以采用前序。AC代码如下。
class Solution {
public:
int TreeDepth(TreeNode* pRoot){
if(pRoot == NULL)
return 0;
int DepthLeft = TreeDepth(pRoot -> left);
int DepthRight = TreeDepth(pRoot -> right);
return 1+(DepthLeft > DepthRight ? DepthLeft:DepthRight);
}
};
在评论区学到此思路更简洁的AC代码。
class Solution {
public:
int TreeDepth(TreeNode* pRoot){
if(pRoot == NULL)
return 0;
return max(TreeDepth(pRoot -> left),TreeDepth(pRoot -> right))+1;
}
};
还可以在简洁一点,代码如下。
class Solution {
public:
int TreeDepth(TreeNode* pRoot){
return pRoot ? max(TreeDepth(pRoot -> left),TreeDepth(pRoot -> right))+1 : 0;
}
};
问题:虽然AC了,但是这三种写法在树的深度很大时可能会出现栈溢出的