快速找到二叉樹的後繼節點

2021-10-05 13:10:00 字數 823 閱讀 1771

設計乙個演算法,給定乙個二叉樹中的節點,返回它的後繼節點。該二叉樹的節點有父節點引用。

二叉樹結點的後繼一般指的是中序遍歷中,該結點的後乙個結點。

如果二叉樹的節點是沒有父節點的引用的。那麼對二叉樹進行中序遍歷可以很容易拿到指定節點的後繼節點。

現在二叉樹的節點擁有父節點的引用,也就是說訪問二叉樹時不需要使用棧就可以輕鬆回溯,解決此問題的效率會高很多。時間複雜度僅為o(logn)

如果指定節點有右子樹,那麼該節點的後繼節點一定是右子樹中最左邊的節點。

如果指定節點沒有右子樹,則往上找它的父節點。直到當前節點是它的父節點的左孩子,那麼這個父節點就是後繼節點。

class

findsuccessornode

return tmp;

}else

throw

newruntimeexception

("該節點沒有後繼");

}else}}

throw

newruntimeexception

("該節點沒有後繼");

}// 帶有父節點引用的 node 類

static

class

node

private

node

(int x, node right, node left, node parent)

}public

static

void

main

(string[

] args)

}

找到二叉樹的後繼節點(或前驅節點)

找到二叉樹的前驅節點 在二叉樹的中序遍歷中,乙個節點的後繼結點就是他的下乙個節點 想要找到任意乙個節點的後繼結點,二叉樹的節點型別node需要包含父節點的資訊 節點 struct node include include 節點 struct node void insert tree node ro...

二叉樹後繼節點

二叉樹後繼節點,中序遍歷的後乙個節點 1 有右子樹,右子樹的最左節點是後繼 2 無右子樹,並且是父節點的左孩子,父節點為後繼 3 無右子樹,並且是父節點的右孩子,查該節點是哪個節點左子樹的最後節點 一直往上找,找到乙個節點是父節點的左孩子,則該父節點為後繼節點 class node def init...

二叉樹2 在二叉樹中找到乙個節點的後繼節點

題目 現在有一種新的二叉樹節點型別如下 public class node 該結構比普通二叉樹節點結構多了乙個指向父節點的parent指標。假 設有一 棵node型別的節點組成的二叉樹,樹中每個節點的parent指標 都正確地指向 自己的父節點,頭節點的parent指向null。只給乙個在 二叉樹中...