十五 在二叉樹中找乙個結點的後繼結點和先驅結點

2021-09-22 19:37:32 字數 901 閱讀 2803

現在有一種新的二叉樹節點型別如下:

public class node

}頭節點的parent指向null。

只給乙個在二叉樹中的某個節點 node,請實現返回node的後繼節點的函式。

在二叉樹的中序遍歷的序列中, node的下乙個節點叫作node的後繼節點,node的前乙個結點叫做node的先驅結點。

後繼結點

1.如果這個結點有右子樹,那麼說明這個節點充當的就是中間位置,他的後繼結點一定是右子樹上最左邊的節點。

2.如果這個節點沒有右子樹,我們可以認為他是左邊的最後乙個結點,那麼中間位置的就是他的後繼結點。就相當於我們再找這個節點是作為那個節點的左子樹的最後乙個節點(左子樹上根節點的右節點是最後乙個)

先驅結點

1.如果這個節點有左子樹,那麼說明這個節點充當的就是中間位置,他的先驅結點是左子樹上最後乙個位置(左子樹上根節點的右節點)。

2.如果這個節點沒有左子樹,說明他是充當的是右子樹上的第乙個位置,他的先驅結點是哪乙個結點把它作為右子樹上第乙個位置。

【後繼結點】

public static node getsuccessornode(node node) 

//1.如果有右子樹,後繼結點是右子樹上最左邊的節點

//2.如果沒有右子樹,後繼結點是把他作為左子樹上最右邊節點的那個節點(第一步是找到)

if(node.right!=null) else

return parent;

} }//3.獲得右子樹上最左邊的節點(最左邊的節點)

public static node getleftmost(node node)

else

return node;

} }

線索二叉樹(找前驅 後繼)

建立線索的初衷就是為了在乙個結點中能夠更方便找到前驅結點和後繼結點。中序線索二叉樹 先序線索二叉樹 後序線索二叉樹 找到以p為跟的子樹中,第乙個被中序遍歷的結點 threadnode firstnode threadnode p 在中序線索二叉樹中找到結點p的後繼結點 threadnode next...

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

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

二叉樹 二叉樹的下乙個結點

題目描述 給定一棵二叉樹和乙個結點,要求找到中序遍歷此樹時該結點的下乙個結點。分析 中序遍歷一棵二叉樹時,要根據乙個結點有無右子樹而分開討論。若當前結點有右子樹,則它的下乙個結點就是其右子樹的最左葉子結點 若當前結點沒有右子樹,那麼又分兩種情況 若當前結點是其父節點的左孩子結點,那麼其下乙個結點就是...