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

本文用python3實現二叉樹的前序、中序、後序遍歷。

完整代碼鏈接:https://github.com/toanoyx/BasicAlgorithm/tree/master/tree

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章