在AVL樹插入的標準過程中,插入一個新節點後,我們會從下到上進行調整,並且在這個過程中,子樹高度可能會增加一個(由於插入和旋轉操作),而子樹(高度增加一)時,仍然有左/右小孩的高度?如果是這樣,一個例子表示讚賞,如果沒有,如果有人能解釋爲什麼,這將是偉大的。謝謝。 :)關於AVL樹插入操作
這裏是AVL樹的引用(https://en.wikipedia.org/wiki/AVL_tree)
問候, 林
在AVL樹插入的標準過程中,插入一個新節點後,我們會從下到上進行調整,並且在這個過程中,子樹高度可能會增加一個(由於插入和旋轉操作),而子樹(高度增加一)時,仍然有左/右小孩的高度?如果是這樣,一個例子表示讚賞,如果沒有,如果有人能解釋爲什麼,這將是偉大的。謝謝。 :)關於AVL樹插入操作
這裏是AVL樹的引用(https://en.wikipedia.org/wiki/AVL_tree)
問候, 林
插入後不可能讓子樹的左右子元素與高度變化保持一致。
讓我們考慮一個簡單的例子,在子樹中只有< 3個節點。平衡因子的possiblities是,
對於平衡係數+1子樹
對於平衡因子-1子樹
對於平衡因子0子樹
所以,不可能有高度變化,仍然有相同的左右兒童高度。
(這個答案存在與問題相同的問題:樹中的每個節點都可以被認爲是子樹的根,沒有標識節點(在修改之前或之後的附加信息可能會改變一組節點),或者相當於子樹,說到子樹是完全不明確的。) – greybeard
您可以將答案中解釋的子樹作爲整棵樹。這個概念將保持不變,您不能通過更改高度來插入,並且仍然保持子節點高度不變。如果您有所不同,請舉一個例子,您可以證明可以更改根節點的高度,並保持左右小孩的身高不變。 –
@AshraffAliWahab,很好的答案,投票了。你完整的確切定義是什麼,你的意思是左右兒童的高度相同?或者你的意思是保持原有的平衡因子(-1,0或+1)? –
平衡二叉樹具有最小可能的最大高度(又名 深度),因爲對於任何給定數量的葉節點,葉節點被放置在儘可能最大的高度處。
一個常見的平衡樹結構是二叉樹結構,其中 每個節點的左和右子樹的高度相差不更 大於1
例如:
這是一個平衡的樹。
如果我們插入1
它由1的高度增加然而,這又是一個平衡樹。由於左,右子樹的高度相差不超過1
BTW,AVL樹是一個平衡樹。所以插入後不可能失去平衡。因爲在每次插入之後,樹通過進行必要的旋轉來平衡自身。
我想你用錯了這個詞平衡了。您認爲平衡沒有高度差異,但最多隻有1高度差異的定義。
你的問題:
在AVL樹插入標準的過程中,是否有可能通過一個(因爲插入和旋轉操作的)子樹高度增加,而子樹(後高度增加一個),仍然有左/右兒童的高度?
如果我們將有哪些具有左,右分支相同的高度,如果我們將插入一個節點到左分支的葉節點,身高會增加,因爲樹的高度爲maximum(height(left_branch, right_branch))
一棵樹。因爲在此操作後height(left_branch)
等於height(right_branch)+1
。所以,他們不可能是平等的。
總之,你的前提是height(left_branch) == height(right_branch)
你的操作increasing height of left_branch by 1
所以height(left_branch) == height(right_branch)
條件不可能是真的了。
感謝Saibot,投票了。是的,當我說平衡時,我的意思是是否有可能具有相同高度的左右子樹。其實我的問題是,在AVL樹插入的標準過程中,有可能子樹高度增加1,而子樹(高度增加1)後,仍然有左/右子高度相同的高度?你的建議是值得讚賞的,我也會改正我原來的問題。 :) –
@ LinMa讓我知道如果這個解釋對你來說還不夠,那麼我可以提供例子。 – ferit
感謝Saibot的細節和投票。 :)對於你的評論,「如果我們有一棵樹,它的左右分支高度相同」,我認爲這裏的假設存在一個問題。在插入節點之前,除了平衡之外,該樹可以比左側孩子高於右側孩子,反之亦然。所以,我認爲你基於這個假設的分析不是100%正確的。我可能是錯的,請隨時糾正我。 –
你能更具體嗎? – ferit
@Saibot,添加AVL樹的引用。我認爲樹木不可能增加1,而保持平衡(左/右)的孩子具有相同的高度。但我可能是錯的,請隨時諮詢。如果我的問題還不清楚,請告訴我哪些部分不清楚。謝謝。 :) –
(簡答:不可能,如果一個更大的子樹高度增加併產生原始高度的子樹,則使用旋轉。要增加同級子樹的高度,請插入多個節點。 )請爲所涉及的節點和樹定義名稱,如_中所示,可以同時使用名稱定義的**> _來插入一個node_ a __的子樹__ _和__以在高度插入前置條件和後置條件。 – greybeard