平衡二叉排序樹演算法 細節問題?

2021-05-26 05:19:35 字數 597 閱讀 1436

最近公司要我做乙個演講,其實就是乙個交流會,題目是紅黑樹。誰叫我是新手呢,得準備啊,看了好久,都不懂,哎,先看看平衡二叉樹

吧。我先看了下平衡二叉樹的演算法,總結如下。

平衡二叉樹的目的就是為了解決查詢時的時間效率問題,盡量是查詢的時間效率保持在log n

需要平衡的四種情況:

1、  左-左-左

2、 左-右-左

3、 右-右-右

4、 右-右-左

如下圖所示:

1、3只需要旋轉一次,分別是右旋,左旋

2、4需要旋轉兩次,分別是先左旋再右旋,先右旋再左旋。

思想雖然簡單,但是我始終看不懂leftbalance函式中case rh: 中的

switch(rd->bf)     //修改*t及其左孩子的平衡因子

這段**,我覺得rd->bf始終都是等於eh的,也就是0,

下面的程式我把這段隱掉了,然後將switch語句用t->bf = lc->bf = eh;替換了。

類似的在rightbalance中,同樣的我也做了同樣的操作。

經測試,新增操作照樣能夠正常工作,難道是測試的例子太少了嗎?希望哪位大俠能夠解答,謝謝。

附上源**。

排序演算法 二叉排序樹

二叉排序樹的基本思想是將序列中的數讀入乙個二叉樹,在讀入時遵循一定的規則 比如,如果二叉樹的乙個節點有左子節點,那麼左子節點一定比父節點的值小 如果乙個節點有右子節點,那麼右子節點一定比父節點的值大。在二叉排序樹製造完成後,通過採用中序遍歷的方法讀取二叉樹節點的值到序列中,就可以得到乙個公升序序列。...

java實現平衡二叉排序樹增刪

在學習了普通二叉排序樹的演算法之後,我們發現了它的一些不足,如果我們的普通二叉樹在插入資料的時候造成樹的一側資料過多的話,就會使得查詢的時候效率大大降低,在極端情況下,我們插入一串有序的數,原本的二叉樹就會變成鍊錶,例如,插入 1,2,3,4,5,6,結果就會變成下圖這樣 這樣就違背了我們二叉樹的初...

演算法總結 二叉排序樹

演算法總結 二叉排序樹 二叉排序樹是一棵特殊的二叉樹,它是一棵二叉樹但同時滿足如下條件 對於樹上任意乙個結點,其上的數值必大於等於其左子樹上任意結點數值,必小於等於其右子樹上任意結點的數值。我們從二叉樹的插入開始了解其建樹方式,對二叉排序樹插入數字 x 1.若當前樹為空,則 x 為其根結點。2.若當...