1.二叉树的深度
用递归的方法,深度应为节点左子树和右子树中深度最大的子树的深度+1。若只有左子树或只有右子树,则为子树的深度+!;
int TreeDepth(TreeNode* pRoot)
{
if(pRoot==NULL)
return 0;
int left=TreeDepth( pRoot->left);
int right=TreeDepth( pRoot->right);
return left>right?left+1:right+1;
}
2.判断一棵树是否是平衡二叉树
简单的方法:需遍历多次。若左右子树的深度不超过1,则为平衡二叉树。,
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
if(pRoot==NULL)
return true;
int left=TreeDepth( pRoot->left);
int right=TreeDepth( pRoot->right);
int dif=abs(left-right);
if(dif>1)
return false;
return IsBalanced_Solution( pRoot->left)&&IsBalanced_Solution( pRoot->right);
}
int TreeDepth(TreeNode* pRoot)
{
if(pRoot==NULL)
return 0;
int left=TreeDepth( pRoot->left);
int right=TreeDepth( pRoot->right);
return left>right?left+1:right+1;
}
};
3.用后序遍历的方法,在遍历到一个节点时已经遍历了他的左右子树,且记录了他的深度。
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
int depth=0;
return IsBalanced(pRoot,depth);
}
bool IsBalanced(TreeNode* pRoot,int &depth)
{
if(pRoot==NULL)
{ depth=0;
return true;
}
int left,right;
if(IsBalanced(pRoot->left,left)&&IsBalanced(pRoot->right,right))
{
int dif=abs(left-right);
if(dif<=1)
{depth=left>right?left+1:right+1;
return true;
}
}
return false;
}
};