二叉树 python实现

详细教程可以看这个python实现二叉树(一)_python 二叉树-优快云博客

具体代码:

class TreeNode:
    def __init__(self, data, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right


class BinTree:
    def __init__(self):
        self.root = None
        self.ls = []

    def add(self, data):
        node = TreeNode(data)
        if not self.root:
            self.root = node
            self.ls.append(self.root)
        else:
            rootNode = self.ls[0]
            if not rootNode.left:
                rootNode.left = node
                self.ls.append(rootNode.left)
            elif not rootNode.right:
                rootNode.right = node
                self.ls.append(rootNode.right)
                self.ls.pop(0)

    def preOrderTraversal(self, root):  # 前序遍历
        if not root:  # 根节点为空,跳过
            return
        print(root.data)
        self.preOrderTraversal(root.left)  # 递归调用,生成左子树
        self.preOrderTraversal(root.right)  # 递归调用,生成右子树

    def preOrderStack(self, root):
        if not root:
            return
        stack, result, node = [], [], root
        while node or stack:  # 节点不空或者stack不空时循环
            while node:
                result.append(node.data)  # 将当前节点的数据项添加到result
                stack.append(node)
                node = node.left  # 当前节点没有左节点时退出
            node = stack.pop()  # 当前节点pop出stack,获取其地址值
            node = node.right  # 寻找当前节点的右节点
        print(result)

    def postOrderTraversal(self, root):  # 后序遍历
        if not root:
            return
        self.postOrderTraversal(root.left)
        self.postOrderTraversal(root.right)
        print(root.data)

    def postOrderStack(self, root):
        if not root:
            return
        stack, seq, result, node = [], [], [], root
        while node or stack:
            while node:
                seq.append(node.data)
                stack.append(node)
                node = node.right
            node = stack.pop()
            node = node.left
        while seq:
            result.append(seq.pop())
        print(result)

    def inOrderTraversal(self, root):  # 中序遍历
        if not root:
            return
        self.inOrderTraversal(root)
        print(root.data)
        self.inOrderTraversal(root)

    def inOrderStack(self, root):
        if not root:
            return
        stack, result, node = [], [], root
        while node or stack:
            while node:
                stack.append(node)
                node = node.left
            node = stack.pop()
            result.append(node.data)
            node = node.right
        print(result)

    def levelOrder(self, root):
        if not root:
            return
        queue, result, node = [], [], root
        queue.append(node)
        while queue:
            node = queue.pop(0)
            result.append(node.data)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        print(result)


if __name__ == '__main__':
    tree = BinTree()
    for i in range(1, 11):
        tree.add(i)
    tree.preOrderTraversal(tree.root)
    tree.preOrderStack(tree.root)
    tree.levelOrder(tree.root)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值