python實現二叉樹的前序 中序 後序遍歷

2021-10-02 18:16:23 字數 1750 閱讀 7127

本文用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...