給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。
首先,先複習下,二叉樹的中序遍歷:中序遍歷首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。如圖所示二叉樹:中序遍歷的結果為:
這道題需要分情況討論:
1、如果乙個節點有右子樹的時候,那麼它的下乙個節點就是它的右子樹中的最左子節點。(比如說b的下乙個節點是h)
2、如果乙個節點沒有右子樹的時候,並且節點是它的父節點的左子節點,那麼該節點的下乙個節點就是它的父節點。(比如說d的下乙個節點是b)
3、如果乙個節點沒有右子樹,並且它還是它父節點的右子節點的話,那麼我們可以看著上面這幅圖,假定乙個符合情況的節點是目標節點(比如說 i),我們可以沿著指向父節點的指標一直向上遍歷,直到找到它的第乙個右父節點。如果這樣的節點存在的話,那麼這個節點的父節點就是我們要找的下乙個節點。
總結一下
就是,如果存在右子樹,就從右子樹開始,一直往左尋找。
如果不存在右子樹,就判斷是不是左子樹,然後一直返回它的根節點就是我們要求的答案。
**很巧妙
public
class
treelinknode
}public treelinknode getnext
(treelinknode pnode)
return pnode;
}while
(pnode.next!=null)
//不存在右子樹
return null;
}
劍指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...