二叉樹的中序遍歷(迴圈實現)

2021-10-08 18:11:46 字數 2090 閱讀 3684

二叉樹用遞迴進行中序遍歷是很容易實現的,但是如果能用迴圈實現的話效率會更好,本人刷題的時候發現了迴圈寫法,故此做下筆記。

一般的中序遍歷**為:

def

bst(root):if

not root:

return

else

: bst(root.left)

return root.val

bst(root.right)

迴圈寫法:

def

bst(root)

: stack =

p = root

res =

while p or stack :

while p:

p = p.left

#先把左節點都放在stack中

node = stack.pop(

)return node.val

p = node.right

圖示說明:

二叉樹中序遍歷

訪問根結點的的左子樹,訪問根結點和訪問根結點的右子樹依次記作 l,d r 中序遍歷 ldr 演算法 遍歷根結點的左子樹,訪問根結點 遍歷根結點的右子樹 對於上面的圖,我們假定只有a,b,c三個結點,則中序遍歷結果為 b a c 採用上節 二叉樹鏈式儲存和前序遍歷 中的遞迴推演 db a c d b ...

二叉樹中序遍歷

二叉樹中序遍歷 非遞迴版本的中序遍歷用棧來實現。乙個元素出現在棧頂一次,這一次會被處理並出棧。trick 用乙個指標去記錄當前節點cur,如果cur left左側還未遍歷,就會將cur入棧並訪問cur left。一行很重要的 是cur cur right,這一句之後如果cur null,則說明棧頂元...

二叉樹 php實現先序 中序 後序遍歷二叉樹

二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹常被用於實現二叉查詢樹和二叉堆 php view plain copy classnode 先序遍歷 根節點 左子樹 右子樹 functionpreorder ro...