給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。
思路:1、如果這個節點為空,那麼返回空
2、如果這個節點有右孩子,那麼這個節點的下乙個節點是右子樹的最左的葉子節點。
3、考慮這個節點不是根節點的情況(根節點的父親節點是null),同時沒有右孩子,那麼判斷這個節點是否是父親節點的左孩子,如果是,返回其父親節點,否則基於這個節點的父親節點迴圈判斷。
4、當這個節點是根節點或者是右子樹最右的葉子節點,下乙個節點是null。
這裡比較繞的是第三種情況,畫**釋一下:
根據中序遍歷,h的下乙個節點是d,h是父親節點的左孩子,那麼直接返回其父親節點。節點b也是如此。
我們來看節點i,i的下乙個節點的b,我們首先訪問到其父親節點,發現i不是d的左孩子,那麼我們就以其父親節點d作為基節點,繼續遍歷父親節點,發現d是父親節點b的左孩子,那麼返回b。
第四種情況:我們來看g節點,經過第三種情況迴圈遍歷後,基節點會指向根節點,而根節點的父親節點是null。
1/*2struct treelinknode
10};
11*/
12class
solution
21//
如果這個節點存在右子樹,那麼這個節點的下乙個節點就是右子樹的最左的葉子節點
22if (pnode->right !=null)
27return
pnode;28}
29//
30//
父節點的左孩子,那麼返回父節點,否則繼續遍歷。
31while (pnode->next !=null)
36 pnode =tmp;37}
38return null; //
考慮是根節點或者最右邊的右葉子節點39}
40 };
劍指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...