8 二叉樹的下乙個節點(Python)

2021-09-28 08:16:03 字數 1869 閱讀 3063

中序遍歷的輸出順序是:左子樹、根節點、右子樹

舉例分析

以下圖為例,中序遍歷是

#// 普通二叉樹

#// 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 如果乙個節點沒有右子樹,且是它父節點的左子節點 ...