编程之美中的题目,但是书上的代码递归太复杂,整理了个优化的解法:
思路: 可以转换为求二叉树中任意一个节点左右子树的高度和
struct Node{
Node *pLeft;
Node *pRight;
};
int maxLen = 0;
int treeDepth(Node *pRoot, &maxLen){
if(pRoot == NULL)
return -1;
int leftDepth = treeDepth(pRoot->pLeft, maxLen) + 1;
int rightDepth = treeDepth(pRoot->pRight, maxLen) + 1;
if(maxLen < leftDepth + rightDepth)
maxLen = leftDepth + rightDepth;
return leftDepth > rightDepth ? leftDepth : rightDepth;
}