题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
“二叉树中和为某一值的路径” 讨论了如何记录树中的路径。代码量比较大,这里尝试更简洁的方法。
如果根节点没有子节点,则深度为1
如果根节点只有左子树,则深度为 1+左子树的深度
如果根节点只有右子树,则深度为 1+右子树的深度
如果根节点既有左子树又有右子树,则深度为 1+max(左子树的深度,右子树深度)
求子树深度用递归~~
#include<algorithm>
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
if(pRoot == NULL) return 0;
if(pRoot -> left == NULL && pRoot -> right == NULL)
return 1;
else if(pRoot -> left != NULL && pRoot -> right == NULL)
return (1 + TreeDepth(pRoot->left));
else if(pRoot -> left == NULL && pRoot -> right != NULL)
return (1 + TreeDepth(pRoot->right));
else
return (1 + max(TreeDepth(pRoot->left), TreeDepth(pRoot->right)));
}
};
因为函数进来首先进来就会判断是否为空,所以下面不必判断左右子树是否为空。直接带进去得到左右子树的深度,然后返回值这样写: