中序遍歷的輸出順序是:左子樹、根節點、右子樹
舉例分析
以下圖為例,中序遍歷是
#// 普通二叉樹
#// a
#// / \
#// b c
#// / \ / \
#// d e f g
#// / \
#// h i
思路:分三種情況,每一種都有對應的例子,能直觀的理解
情況一:
情況二:
情況三:
下面我們就可以是實現上面的思想了:
class
treelinknode
:# 指定二叉樹,不僅有指向左右的指標,還有乙個指向父節點的指標
def__init__
(self,x)
: self.val = x
self.right =
none
self.left =
none
self.
next
=none
class
solution
:def
getnext
(self,pnode)
:# pnoed是二叉樹的任意節點
if pnode is
none
:# 排空
return
none
pnext =
none
# 定義乙個節點pnext,也就是我們要找的下乙個節點
if pnode.right:
# 若節點pnoed存在右子樹(情況一)
pnode = pnode.right # 將有節點賦值給pnoed
while pnode.left:
# 若pnoed有左子節點,則把左子節點賦值給pnoed,並返回給pnext
pnode = pnode.left
pnext = pnode
else
:# 若節點pnoed不存在右子樹
if pnode.
next
and pnode.
next
.left == pnode:
# 若節點pnoed是其父節點的左子節點(情況二)
pnext = pnode.
next
# 下乙個節點就是其父節點
elif pnode.
next
and pnode.
next
.right == pnode:
# 若節點pnoed是其父節點的右子節點(情況三)
pnode = pnode.
next
# 將父節點賦值給節點pnoed
while pnode.
next
and pnode.
next
.right == pnode:
# 若節點pnoed是其父節點的右子節點,則一直向上遍歷
pnode = pnode.
next
if pnode.
next
:# 否則,節點pnoed是其父節點的左子節點,則返回其父節點
pnext = pnode.
next
return pnext
8 二叉樹的下乙個節點
理解關鍵 先序遍歷的意思是先遍歷左子樹,等到左子樹全部遍歷完之後才遍歷自己,然後是右子樹。include using namespace std struct binarytreenode 視覺化樹結構 void padding char ch,int n void print node struc...
8 二叉樹的下乙個節點
給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。分三種情況考慮。1 若該節點存在右子樹,則下一節點為右子樹最左邊的節點。2 該節點不存在右子樹,若該節點為父節點的左節點,則該父節點為該節點的下一節點。3 若該節點為...
8 二叉樹的下乙個節點
public static treenode getnext treenode node treenode temp node.right treenode nextnode 如果乙個節點有右子樹 if temp null nextnode temp 如果乙個節點沒有右子樹,且是它父節點的左子節點 ...