/*
39:> 二叉树的深度
*/
int Depth(BinTree* pRoot)
{
if (pRoot == NULL)
return 0;
int nLeft = Depth(pRoot->m_pLeft);
int nRight = Depth(pRoot->m_pRight);
return (nLeft > nRight) ? (nLeft + 1) : (nRight+1);
}
/*
判断是不是平衡二叉树
(每个节点遍历一遍的解法)
即,遍历当前结点前,其左右子树已经遍历并确定了深度
*/
bool IsBalanced(BinTree* pRoot, int *depth);
bool IsBalanced(BinTree* pRoot)
{
int depth = 0;
return IsBalanced(pRoot, &depth);
}
bool IsBalanced(BinTree* pRoot, int *depth)
{
if (pRoot == NULL)
{
*depth = 0;
return true;
}
int left = 0;
int right = 0;
if (IsBalanced(pRoot->m_pLeft, &left)
&& IsBalanced(pRoot->m_pRight, &right))
{
int dif = left - right;
if (dif <= 1 || dif >= -1)
{
*depth = left > right ? (left + 1) : (right+1);
return true;
}
}
return false;
}
[剑指offer]二叉树深度vs判断平衡二叉树
最新推荐文章于 2021-11-26 20:24:02 发布