0
問:直觀的方式來了解樹遞歸 - 編寫代碼,以檢查是否二叉樹是平衡
實現一個功能,以檢查是否二叉樹是平衡的(即沒有0兩個節點的高度不同從根本上超過1)。
解決方案:
int maxDepth(Node *root)
{
if(!root) return 0;
return 1 + max(maxDepth(root->left), maxDepth(root->right));
}
int minDepth(Node *root)
{
if(!root) return 0;
return 1 + min(minDepth(root->left), minDepth(root->right));
}
bool isBalanced(Node *root)
{
return maxDepth(root)-minDepth(root) <= 1;
}
有人可以幫助我瞭解這個解決方案背後的直覺?我努力「看到」樹算法背後的遞歸。我知道maxDepth
和minDepth
應該分別找到樹中最大深度和最小深度節點的高度,但我不明白遞歸如何工作。
更重要的是,我不太清楚我可以自己想出這個解決方案。因此,有關如何處理一般樹問題的任何提示將不勝感激。
你是否開始學習遞歸樹算法? –
@austinwernli是 –
Ouch。你應該嘗試以遞歸的方式思考問題。嘗試一些來自http://codingbat.com/java/Recursion-1的問題。他們會幫助你更好地理解它。 –