二叉樹用遞迴進行中序遍歷是很容易實現的,但是如果能用迴圈實現的話效率會更好,本人刷題的時候發現了迴圈寫法,故此做下筆記。
一般的中序遍歷**為:
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...