编辑代码

# coding:utf-8
#JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
#print("Hello world!   -  python.jsrun.net .")
class TreeNode:
    def __init__(self, key):
        self.left = None
        self.right = None
        self.val = key

class BinaryTree:
    def __init__(self):
        self.root = None

    def insert(self, key):
        # 如果树为空,则创建根节点
        if self.root is None:
            self.root = TreeNode(key)
        else:
            # 否则,递归地找到应该插入新节点的位置
            self._insert(self.root, key)

    def _insert(self, node, key):
        # 如果新节点的值小于当前节点的值,则递归地插入到左子树
        if key < node.val:
            if node.left is None:
                node.left = TreeNode(key)
            else:
                self._insert(node.left, key)
        # 如果新节点的值大于或等于当前节点的值,则递归地插入到右子树
        else:
            if node.right is None:
                node.right = TreeNode(key)
            else:
                self._insert(node.right, key)

    def inorder(self, node):
        # 中序遍历:左子树 -> 当前节点 -> 右子树
        if node:
            self.inorder(node.left)
            print(node.val, end=' ')
            self.inorder(node.right)

    def preorder(self, node):
        # 前序遍历:当前节点 -> 左子树 -> 右子树
        if node:
            print(node.val, end=' ')
            self.preorder(node.left)
            self.preorder(node.right)

    def postorder(self, node):
        # 后序遍历:左子树 -> 右子树 -> 当前节点
        if node:
            self.postorder(node.left)
            self.postorder(node.right)
            print(node.val, end=' ')

# 使用示例
if __name__ == "__main__":
    tree = BinaryTree()
    tree.insert(50)
    tree.insert(30)
    tree.insert(20)
    tree.insert(40)
    tree.insert(70)
    tree.insert(60)
    tree.insert(80)

    print("中序遍历:")
    tree.inorder(tree.root)
    print("\n前序遍历:")
    tree.preorder(tree.root)
    print("\n后序遍历:")
    tree.postorder(tree.root)