我正在研究 Leetcode 問題
uj5u.com熱心網友回復:
需要注意的幾點:
- 樹的高度是其葉子的最深層次。
- 自然,父母身高是其最高孩子的身高
1。 - 如果樹的所有子高度之間的差異
1小于或等于,則樹是平衡的。 - 函式名稱
treeHeight令人困惑。應該叫balancedTreeHeightOrMinusOne
balancedTreeHeightOrMinusOne因此,如果不是 -1,則樹是平衡的;它是通過(遞回地)檢查balancedTreeHeightOrMinusOne其子項的 來計算的。如果它們之間的差異太大,則回傳-1,因為這不平衡。否則回傳它的最高孩子的身高加一。
uj5u.com熱心網友回復:
基本情況是這樣的:
if(!root) return 0;
所以我們知道函式如何回傳 0。
下一個要查看的案例是這個:
return Math.max(leftSubTree, rightSubTree) 1;
我們從基本情況知道leftSubTree和rightSubTree都可能是 0(因為它們代表遞回呼叫的回傳值),所以我們這里有一個回傳 1 的情況。所以現在我們已經看到可以回傳 0 或 1。
但這return也可以得到最大值 1,因此回傳 2!因此任何正整數都成為可能的回傳值。
現在看看這個宣告:
if(Math.abs(leftSubTree - rightSubTree) > 1) return -1;
正如我們所看到的,leftSubTree并且rightSubTree可以是任何無符號整數(因為它們是遞回呼叫回傳的值),絕對差可以是任何無符號整數,因此可能存在這種情況為真的情況。所以現在我們有第一種情況,回傳值為 -1(這里的意思是:“它不平衡”)。
唯一需要解釋的宣告:
if(leftSubTree === -1 || rightSubTree === -1) return -1;
在前面的例子中,我們看到遞回呼叫確實可以回傳 -1。所以這里說如果任一子樹不平衡,那么這棵樹也不平衡。
uj5u.com熱心網友回復:
假設您有一個簡單的樹,例如:
const tree = {
val: 1,
left: null,
right: {
val: 2,
left: null,
right: null
}
}
當你呼叫 時treeHeight(tree),你會得到兩個遞回呼叫:treeHeight(tree.left)和treeHeight(tree.right).
既然tree.left是null,treeHeight(tree.left)回報0,那么leftSubtree == 0。
tree.rightis not null,所以它再次遞回,呼叫treeHeight(tree.right.leftand treeHeight(tree.right.right)。由于這兩個都是null,兩個回傳值都是0,所以在這個呼叫中,leftSubtree == 0和rightSubtree == 0。Math.abs(leftSubTree - rightSubTree) == 0,所以它回傳Math.max(leftSubtree, rightSubtree) 1。既然Math.max(0, 0)是0,這就是回報1。
所以在最初的呼叫中,我們現在有rightSubtree == 1. Math.abs(leftSubTree - rightSubTree) > 1) == 1,所以條件Math.abs(leftSubTree - rightSubTree) > 1)不成立。我們去else街區然后回傳Math.max(leftSubtree, rightSubtree) 1。這回傳2。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/520656.html
下一篇:遞回地展平嵌套物件的地圖
