設計乙個演算法,給定乙個二叉樹中的節點,返回它的後繼節點。該二叉樹的節點有父節點引用。
二叉樹結點的後繼一般指的是中序遍歷中,該結點的後乙個結點。
如果二叉樹的節點是沒有父節點的引用的。那麼對二叉樹進行中序遍歷可以很容易拿到指定節點的後繼節點。
現在二叉樹的節點擁有父節點的引用,也就是說訪問二叉樹時不需要使用棧就可以輕鬆回溯,解決此問題的效率會高很多。時間複雜度僅為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。只給乙個在 二叉樹中...