输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
int TreeDepth(TreeNode* pRoot)
{
if(!pRoot) return 0;
return 1 + max(TreeDepth(pRoot->left) , TreeDepth(pRoot->right));
}
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
低效率思路:调用上面的函数,使左右子树深度差不超过1,但是一个节点会被重复遍历多次
高效率思路:边遍历边观察是不是平衡,剪枝思想
int getDepth(TreeNode *pRoot){
if(!pRoot) return 0;
int left = getDepth(pRoot->left);
if(left == -1) return -1;
int right = getDepth(pRoot->right);
if(right == -1) return -1;
return abs(left - right) > 1 ? -1 : 1 + max(left, right);
}
bool IsBalanced_Solution(TreeNode* pRoot) {
return getDepth(pRoot) != -1;
}
来源:CSDN
作者:红尘倥偬
链接:https://blog.csdn.net/vivian9982/article/details/104439654