2
我有以下的結構來表示二叉樹:強烈平衡樹 - 改進
typedef struct node *pnode;
typedef struct node {
int val;
pnode left;
pnode right;
} snode;
重樹是從樹中的所有節點的val
參數的總和。我們說樹是強烈平衡當它是空的或左權重等於右子樹的權重和每個子樹(左和右)強烈平衡。我必須編寫函數來告訴樹是否強烈平衡。
的代碼,我寫道:
int getWeight(pnode tree)
{
if(! tree)
return 0;
return getWeight(tree->left) + getWeight(tree->right)
+ tree->val;
}
bool isStronglyBalanced(pnode tree)
{
if(! tree)
return true;
int wL, wR;
wL = getWeight(tree->left);
wR = getWeight(tree->right);
if(wL != wR)
return false;
return (isStronglyBalanced(tree->left) && isStronglyBalanced(tree->right));
}
上面的函數,它的工作不錯,但我注意到它的訪問不止一次樹的節點。是否可以改進(也許通過使用動態編程)來訪問樹的每個節點一次?
這是一個很好的建議,但是不應該將返回值設爲'{balanced && weight_left == weight_right,weight_right + weight_left + tree-> val}'? –
@DougCurrie:的確如此。謝謝。修正了,注意到weight_left == weight_right。 – rici