判斷一個二叉樹是否是平衡二叉樹(AVL)
阿新 • • 發佈:2019-01-24
要求:輸入一個二叉樹的根節點,判斷該樹是不是平衡二叉樹
平衡二叉樹:任意一節點左右子樹的高度之差的絕對值小於2
bool isAVL(BinaryTreeNode *pRoot, int &height) { if (pRoot == NULL) { height = 0; return true; } // 判斷左子樹是否是平衡樹 int heightLeft; bool resultLeft = isAVL(pRoot->lchild, heightLeft); // 判斷右子樹是否是平衡樹 int heightRight; bool resultRight = isAVL(pRoot->rchild, heightRight); // 左右子樹都為AVL,判斷根節點的平衡性 if (resultLeft && resultRight &&abs(heightLeft - heightRight) < 2) { height = (heightLeft > heightRight) ? (heightLeft + 1) : (heightRight + 1); return true; } return false; }
PS:二叉樹的深度
int TreeDepth(BinaryTreeNode *pRoot)
{
if (pRoot == NULL)
{
return 0;
}
int nLeft = TreeDepth(pRoot->lchild);
int nRight = TreeDepth(pRoot->rchild);
return (nLeft > nRight) ? (nLeft + 1) : (nRight + 1);
}