思路分享:
一、有右子樹時,就是右子樹的最左結點
二、無右子樹時,分為兩種情況
1、結點的父節點為空,則為根節點,所以沒有下乙個結點
2、結點的父節點不為空
(1)結點的父節點不為空並且結點是父節點的右子結點,則向上遞迴,直到結點為父節點的左子結點,則為該結點的父節點
(2)結點的父節點不為空並且結點是父節點的左子結點,則是該結點的父節點
/*
public class treelinknode }*/
public class solution else if (pnode.next != null) else
return pnode;}}
總結:1、寫**的時候一定要加上邊界值的判斷,我因為指標為空的問題報錯了好幾次。
(1)入口邊界值的判斷
(2)尋找指標過程中邊界值的判斷。
2、&&與運算的先後順序問題:從前往後計算,注意先後順序
//這樣寫是對的
while (pnode.next != null && pnode == pnode.next.right)
//這樣寫就會丟擲空指標異常
while (pnode == pnode.next.right && pnode.next != null)
2、多畫幾層二叉樹來找規律。我第一次只畫了三層二叉樹,導致規律都是不對的,這真的是密之尷尬。當時以為右子樹為空的時候,該結點為右孩子就是根節點,但是如果畫4層就可以知道並不是這樣。
3、分析之後把相同的歸類,我開始分析的時候是把有右結點的分為:是父節點的左孩子和右孩子兩種情況,分析到最後**可以合併,顯得比較簡潔。
劍指offer 二叉樹的下乙個結點
題目描述 給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。using namespace std struct treelinknode class solution treelinknode nextnode n...
劍指offer 二叉樹的下乙個節點
給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。在編寫程式之前,先縷清思路。在該題總,應該分不同情況對其進行討論。情況一 魯棒性 目標節點為空節點時返回ptr 情況二 目標節點沒有父節點且沒有右子樹時,即該節點就是...
劍指offer 二叉樹的下乙個節點
struct treelinknode class solution return currnode case two the node does not has right son,it is the left son of its father if pnode next null return...