2016-03-23 101 views
0

在AVL樹插入的標準過程中,插入一個新節點後,我們會從下到上進行調整,並且在這個過程中,子樹高度可能會增加一個(由於插入和旋轉操作),而子樹(高度增加一)時,仍然有左/右小孩的高度?如果是這樣,一個例子表示讚賞,如果沒有,如果有人能解釋爲什麼,這將是偉大的。謝謝。 :)關於AVL樹插入操作

這裏是AVL樹的引用(https://en.wikipedia.org/wiki/AVL_tree

問候, 林

+1

你能更具體嗎? – ferit

+0

@Saibot,添加AVL樹的引用。我認爲樹木不可能增加1,而保持平衡(左/右)的孩子具有相同的高度。但我可能是錯的,請隨時諮詢。如果我的問題還不清楚,請告訴我哪些部分不清楚。謝謝。 :) –

+1

(簡答:不可能,如果一個更大的子樹高度增加併產生原始高度的子樹,則使用旋轉。要增加同級子樹的高度,請插入多個節點。 )請爲所涉及的節點和樹定義名稱,如_中所示,可以同時使用名稱定義的**> _來插入一個node_ a __的子樹__ _和__以在高度插入前置條件和後置條件。 – greybeard

回答

1

插入後不可能讓子樹的左右子元素與高度變化保持一致。

讓我們考慮一個簡單的例子,在子樹中只有< 3個節點。平衡因子的possiblities是,

  • +1 - 這是在子樹1左子根節點無權孩子
  • -1 - 這是在子樹1右孩子沒有左孩子的根節點
  • 0 - 子樹中的根節點在Right和Left中有1個節點。

對於平衡係數+1子樹

  • 如果把它插入到正確的,我們都ok
  • 如果我們插入到左邊,平衡因子變化爲2所以,我們需要以平衡樹,在這種情況下子樹的高度被改變。

對於平衡因子-1子樹

  • 如果我們插入走後,我們都ok
  • 如果我們插入正確,平衡因素的變化爲-2。所以我們需要平衡樹,在這種情況下,子樹的高度會發生變化。

對於平衡因子0子樹

  • 如果我們插入到左邊,我們都ok。高度改變了,但子節點也改變了。
  • 如果我們插入右邊,我們沒事。高度改變了,但子節點也改變了。

所以,不可能有高度變化,仍然有相同的左右兒童高度。

+1

(這個答案存在與問題相同的問題:樹中的每個節點都可以被認爲是子樹的根,沒有標識節點(在修改之前或之後的附加信息可能會改變一組節點),或者相當於子樹,說到子樹是完全不明確的。) – greybeard

+1

您可以將答案中解釋的子樹作爲整棵樹。這個概念將保持不變,您不能通過更改高度來插入,並且仍然保持子節點高度不變。如果您有所不同,請舉一個例子,您可以證明可以更改根節點的高度,並保持左右小孩的身高不變。 –

+0

@AshraffAliWahab,很好的答案,投票了。你完整的確切定義是什麼,你的意思是左右兒童的高度相同?或者你的意思是保持原有的平衡因子(-1,0或+1)? –

4

Wikipedia Binary Tree page

平衡二叉樹具有最小可能的最大高度(又名 深度),因爲對於任何給定數量的葉節點,葉節點被放置在儘可能最大的高度處。

一個常見的平衡樹結構是二叉樹結構,其中 每個節點的左和右子樹的高度相差不更 大於1

例如:

這是一個平衡的樹。

enter image description here

如果我們插入1它由1的高度增加然而,這又是一個平衡樹。由於左,右子樹的高度相差不超過1

enter image description here

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)條件不可能是真的了。

+1

感謝Saibot,投票了。是的,當我說平衡時,我的意思是是否有可能具有相同高度的左右子樹。其實我的問題是,在AVL樹插入的標準過程中,有可能子樹高度增加1,而子樹(高度增加1)後,仍然有左/右子高度相同的高度?你的建議是值得讚賞的,我也會改正我原來的問題。 :) –

+1

@ LinMa讓我知道如果這個解釋對你來說還不夠,那麼我可以提供例子。 – ferit

+0

感謝Saibot的細節和投票。 :)對於你的評論,「如果我們有一棵樹,它的左右分支高度相同」,我認爲這裏的假設存在一個問題。在插入節點之前,除了平衡之外,該樹可以比左側孩子高於右側孩子,反之亦然。所以,我認爲你基於這個假設的分析不是100%正確的。我可能是錯的,請隨時糾正我。 –