前驅節點:二叉樹中序遍歷完成後和這個節點相鄰的前面的節點為該節點的前驅節點
後繼節點:二叉樹中序遍歷完成後和這個節點相鄰的後面的節點為該節點的後繼節點
中序遍歷順序:8->4->9->2->10->5->1->6->3->7
4號節點的前驅節點為8號節點,後繼節點為9號節點。
struct node
;
struct node
;
比普通的二叉樹結構多了乙個指向該節點父親節點的指標,我們規定:頭節點指向其父親節點的指標為空或者是頭節點本身
1:如果當前節點的左子樹不為空,那麼該點的前驅節點為該點左子樹中最右的節點
假設求上圖中1節點的前驅節點,1節點的左子樹不為空,那麼1節點的前驅節點為左子樹中最右的節點--5節點
2:如果當前節點的左子樹為空,那麼該點的前驅節點為從該點往上延伸,如果延伸到的點為其父親節點的右孩子,那麼這個父親節點就是該點的前驅節點
假設求上圖中10號節點的前驅節點,10號節點的左子樹為空,10號節點不是其父親節點的右孩子,往上延伸,看5號節點,5號節點是其父親的右孩子,那麼,2號節點就是10號節點的前驅節點
注意,這裡有一種特殊情況,看上圖的8號節點,8號節點的左子樹為空,8號節點不是其父親的左子樹,往上延伸,看4號節點,4號節點不是其父親節點的左子樹,往上延伸,看1號節點,1號節點沒有父親節點了,這種特殊情況在codiing中已經做了處理,等會看**就懂了。
struct node
;node getfristornode(node heap)//heap代表當前要找前驅節點的節點
return parent;
}}getrightmost(node heap)//這個函式是求左子樹中最右的節點的函式
和求前驅節點差不多。
struct node
;node getsuccessornode(node heap)//heap代表當前要找後繼節點的節點
return parent;
}}node getleftmost(node heap)//這個函式是求右子樹中最左的節點的函式
學習筆記 尋找二叉樹的前驅節點和後繼節點
二叉樹前驅節點和後繼節點 乙個二叉樹中序遍歷中某個節點的前乙個節點叫該節點的前驅節點,某個節點的後乙個節點叫後繼節點 該題目中還有乙個節點指向節點的父節點 parent,規定頭節點的父親節點的指標為空。struct treenode 思路 1 尋找前驅 若該節點存在左子樹,則其前驅節點為左子樹最右邊...
找到二叉樹的後繼節點(或前驅節點)
找到二叉樹的前驅節點 在二叉樹的中序遍歷中,乙個節點的後繼結點就是他的下乙個節點 想要找到任意乙個節點的後繼結點,二叉樹的節點型別node需要包含父節點的資訊 節點 struct node include include 節點 struct node void insert tree node ro...
二叉樹 在二叉樹中找到乙個節點的前驅節點
二叉樹 在二叉樹中找到乙個節點的後繼節點 可以將該結點分為兩種情況,1.沒有左子樹,那它是某乙個結點的右子樹的最左結點,然後找到這個右子樹的parent即可 找它的parent,直到當前節點是parent的右子樹為止 2.有左子樹,那前驅節點就是它的左子樹的最右結點 public static no...