二叉树的遍历算法——python

    class Node(object):
        """结点类"""
    
        def __init__(self, item):
            self.item = item
            self.lchild = None  # 左子树为空
            self.rchild = None  # 右子树为空
    
    
    class BinaryTree(object):
        """二叉树"""
    
        def __init__(self, node=None):
            self.root = node  # 定义根为node
    
        def add(self, item):
            """
            广度优先遍历方式添加结点
            :param item:
            :return:
            """
            if self.root is None:  # 如果为二叉树为空
                self.root = Node(item)  # 将item添加进去
            else:
                queue = []
                queue.append(self.root)
    
                while len(queue) > 0:
                    node = queue.pop(0)
                    if not node.lchild:
                        node.lchild = Node(item)
                        return
                    else:
                        queue.append(node.lchild)
                    if not node.rchild:
                        node.rchild = Node(item)
                        return
                    else:
                        queue.append(node.rchild)
    
        def breadh_travel(self):
            """广度优先遍历"""
            if self.root is None:
                return
            queue = []
            queue.append(self.root)
            while len(queue) > 0:
                node = queue.pop(0)
                print(node.item, end=" ")
                if node.lchild:
                    queue.append(node.lchild)
                if node.rchild:
                    queue.append(node.rchild)
    
        def preorder_travel(self, root):
            """先序 根 左 右"""
            if root:
                print(root.item, end=" ")
                self.preorder_travel(root.lchild)
                self.preorder_travel(root.rchild)
    
        def inorder_travel(self, root):
            """中序 左 根  右"""
            if root:
                self.inorder_travel(root.lchild)
                print(root.item, end=" ")
                self.inorder_travel(root.rchild)
    
        def postorder_travel(self, root):
            """后序 左 右 根"""
            if root:
                self.postorder_travel(root.lchild)
                self.postorder_travel(root.rchild)
                print(root.item, end=" ")
    
    
    if __name__ == '__main__':
        tree = BinaryTree()
        tree.add(0)
        tree.add(1)
        tree.add(2)
        tree.add(3)
        tree.add(4)
        tree.add(5)
        tree.add(6)
        tree.add(7)
        tree.add(8)
        tree.add(9)
        tree.breadh_travel()
        print("")
        tree.preorder_travel(tree.root)
        print("")
        tree.inorder_travel(tree.root)
        print("")
        tree.postorder_travel(tree.root)
        print("")
        ```

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值