1 15 劍指offer 二叉樹的下乙個節點

2021-09-09 06:01:03 字數 1502 閱讀 6761

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

找到中序遍歷下乙個節點的規律

乙個節點有右子樹,下乙個節點是右子樹的最左子節點。

沒有右子樹,且是父節點的左節點,下乙個節點是父節點。

沒有右子樹,且是父節點的右節點,下乙個節點是向上遍歷父節點,直到找到乙個父節點,是它自己的父節點的左節點,下乙個節點就是它自己的父節點。(畫圖理解)如果沒有父節點是左節點,那麼就沒有下乙個節點。

class

treelinknode

:def

__init__

(self, x)

: self.val = x

self.left =

none

self.right =

none

self.

next

=none

class

solution

:def

getnext

(self, pnode)

:if pnode ==

none

:return

none

if pnode.right !=

none

:#有右子樹

rnode = pnode.right #右子樹

while rnode.left !=

none

: rnode = rnode.left # 右子樹的最左子節點

return rnode

else

:# 無右子樹

if pnode.

next

!=none

:if pnode.

next

.left == pnode:

# 是左節點

return pnode.

next

# 下個節點是父節點

elif pnode.

next

.right == pnode:

#是右節點

lnode = pnode.

next

# 父節點

while lnode.

next

!=none

and lnode.

next

.left != lnode:

# 不是根結點且父節點不是左節點

lnode = lnode.

next

return lnode.

next

else

:return

none

在無右子樹要取父節點時,沒判斷父節點是否為空。

問題一開始要判斷給的節點是否為空

特殊測試用例:

所有節點都沒有右/左子節點的二叉樹;

只有乙個節點的二叉樹;

二叉樹根節點為空。

注意細節。

劍指offer 二叉樹 二叉樹搜尋樹

package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...

劍指offer 二叉樹 二叉樹的映象

操作給定的二叉樹,將其變換為源二叉樹的映象。二叉樹的映象定義 源二叉樹 8 6 10 5 7 9 11 映象二叉樹 8 10 6 11 9 7 51,交換左右子樹 2,遞迴交換左右子樹的左右子節點 package offertest title mirror description author 田...

劍指Offer 二叉樹 對稱的二叉樹

含有兩道題,都從樹的遞迴入手 請完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。解題思路 映象翻 只需要遍歷二叉樹,每次訪問乙個結點時,交換其左右子樹。實現 definition for a binary tree node.class treenode def init self,x self....