給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。
找到中序遍歷下乙個節點的規律
乙個節點有右子樹,下乙個節點是右子樹的最左子節點。
沒有右子樹,且是父節點的左節點,下乙個節點是父節點。
沒有右子樹,且是父節點的右節點,下乙個節點是向上遍歷父節點,直到找到乙個父節點,是它自己的父節點的左節點,下乙個節點就是它自己的父節點。(畫圖理解)如果沒有父節點是左節點,那麼就沒有下乙個節點。
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....