二叉樹的下乙個節點(java版)

2021-08-02 05:48:42 字數 1254 閱讀 3147

【題目描述】給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。

【解題思路1】暴力解法

//1.若給定的節點pnode的右子樹不為空,則中序遍歷的下乙個節點為其右子樹的最左側節點。

//2.若給定的節點pnode的右子樹為空,分兩種情況。一種是左子樹不為空,此時中序遍歷的下乙個節點為其父節點。另一種情況是,其為葉子節點,左右子樹都為空。

//3.當其為葉子節點的時候,需要判斷是左葉子節點還是右葉子節點。若是左葉子節點,則中序遍歷的下乙個節點即為其父節點;若為右葉子節點,則中序遍歷的下乙個節點,應為其父節點的父節點。(排除特殊情況)

//4.注意到在第三條中,有可能出現特殊情況。比如二叉樹只有乙個節點pnode的情況;二叉樹是單枝斜樹的情況;

public

class solution

//右子樹不為空的情況

if(pnode.right!=null)else

}return inx;

}else

if(pnode.left !=null && pnode.right ==null)else

if(pnode.next.left == pnode)elseelse

}if(inx == pnode)

while(inx != null)else

}if(inx == pnode)else}}

}}

【解題思路2】

結合圖,我們可發現分成兩大類:

1、有右子樹的,那麼下個結點就是右子樹最左邊的點;(eg:d,b,e,a,c,g)

2、沒有右子樹的,也可以分成兩類:

a)是父節點左孩子(eg:n,i,l) ,那麼父節點就是下乙個節點 ;

b)是父節點的右孩子(eg:h,j,k,m)找他的父節點的父節點的父節點…直到當前結點是其父節點的左孩子位置。如果沒有eg:m,那麼他就是尾節點。

3.該圖和方案由牛客「小河溝大河溝」提供,原始碼為「weizier」提供。

public

class solution

while(node.next!=null)

return

null; //退到了根節點仍沒找到,則返回null

}}

二叉樹的下乙個節點

問題 題目給出的預設 為 1 coding utf 8 2 class treelinknode 3 def init self,x 4 self.val x5 self.left none6 self.right none7 self.next none 8class solution 9def ...

二叉樹的下乙個節點

coding utf 8 class treelinknode def init self,x self.val x self.left none self.right none self.next none 1 該節點有左子樹,說明左邊已經遍歷過,該節點作為根節點,下一步應該填右子樹,如果該節點有...

二叉樹的下乙個節點

題目描述 給定一棵二叉樹和其中的乙個節點,如何找出中序遍歷序列的下乙個節點?樹中的節點除了有兩個分別別指向左右子節點的指標,還有乙個指向父節點的指標 例如 這棵樹的中序遍歷是 d,b,h,e,i,a,f,c,g 解題思路 3 當結點的右子樹為空,且是它父節點的左子節點時,它的下乙個節點就是它的父節點...