二叉樹進階應用之查找結點的后繼結點


    一般我們討論的二叉樹的結點結構只有:結點值、左兒子、右兒子。

    但是如果在結點結構中加一個成員屬性,指向結點的父節點。那么又會引出不少的變化。

    一:前繼結點與后繼結點

    與鏈表不同,鏈表的前繼后繼就是根據結點在鏈表中的位置的前一結點、后一結點得出的。但是樹不同,結點的上一層與下一層都含有較多的結點,所以不能單純地由上下層關系定義前繼結點與后繼結點。

    我們說的二叉樹結點的前繼結點、后繼結點是:在中序遍歷這棵二叉樹的結果中,該結點的前一結點是它的前繼結點、后一結點是后繼結點。

 

    二:給出某一結點node,求node的后繼結點(該樹的結點包含父節點指針)【注:該題沒有給出樹的root結點】

    傳統解法:由node的父節點不斷往上,找到root結點,然后從root開始中序遍歷樹得到中序遍歷結果,則中序遍歷結果中node的后面一個結點就是后繼結點。

    優化解法:從中序遍歷的特性去尋找:左-根-右

                 中序遍歷一個結點時,下一個結點有三種情況:1:如果當前結點有右結點,則下一個遍歷的是右子樹的最左結點

                                                                            2:如果當前結點無右結點,若它是父節點的左兒子,則下一遍歷的是父節點

                                                                            3:如果當前結點無右結點,且它是父節點的右兒子,則所在子樹遍歷完了。向上尋找一個作為左兒子的祖先結點,那么下一遍歷的就是該祖先結點的父節點;(一直找到根節點為止)

                                                                            如果上面三種情況都沒找到,則該節點是樹的最后一個結點,無后繼結點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM