本文用python3實現二叉樹的前序、中序、後序遍歷。
from typing import typevar, generic, generator, optional
t = typevar("t")
class treenode(generic[t]):
def __init__(self, value: t):
self.val = value
self.left = none
self.right = none
# 前序遍歷
def preorder(root: optional[treenode[t]]) -> generator[t, none, none]:
if root:
yield root.val
yield from preorder(root.left)
yield from preorder(root.right)
# 中序遍歷
def inorder(root: optional[treenode[t]]) -> generator[t, none, none]:
if root:
yield from inorder(root.left)
yield root.val
yield from inorder(root.right)
# 後序遍歷
def postorder(root: optional[treenode[t]]) -> generator[t, none, none]:
if root:
yield from postorder(root.left)
yield from postorder(root.right)
yield root.val
if __name__ == "__main__":
tree = treenode("1")
n2 = treenode("2")
n3 = treenode("3")
n4 = treenode("4")
n5 = treenode("5")
n6 = treenode("6")
n7 = treenode("7")
n8 = treenode("8")
n9 = treenode("9")
tree.left, tree.right = n2, n3
n2.left, n2.right = n4, n5
n3.left, n3.right = n6, n7
n4.left, n4.right = n8, n9
print("preorder: " + str(list(preorder(tree))))
print("inorder: " + str(list(inorder(tree))))
print("postorder: " + str(list(postorder(tree))))
測試結果:
用例中的二叉樹:
前序遍歷:1,2,4,8,9,5,3,6,7
中序遍歷:8,4,9,2,5,1,6,3,7
後序遍歷:8,9,4,5,2,6,7,3,1
前序遍歷二叉樹
題目 給定乙個二叉樹,返回它的 前序 遍歷。示例 輸入 1,null,2,3 輸出 1,2,3 方法一 遞迴 這是最容易想到且最容易實現的演算法。definition for a binary tree node.struct treenode treenode int x val x left n...
前序建立二叉樹 前序 中序 後序遍歷二叉樹
二叉樹的建立 如果要在記憶體中建立乙個如下左圖這樣的樹,wield 能讓每個結點確認是否有左右孩子,我們對它進行擴充套件,變成如下右圖的樣子,也就是將二叉樹中的每個結點的空指標引出乙個虛結點,其值為乙個特定值,比如 稱之為擴充套件二叉樹。擴充套件二叉樹就可以做到乙個遍歷序列確定一棵二叉樹了。如前序遍...
二叉樹的前序遍歷
二叉樹的前序遍歷 public class tree 建立二叉樹,返回根結點 param return public static tree createtree int else else else else return root 前序遍歷 param tree public static vo...