python 二叉搜索树及三种遍历方式实现

  1. 二叉搜索树是一种特殊的二叉树,它有以下几个特点:

    1. 若节点X的左子树不为空,则节点X左侧的所有节点值都小于这个节点的值;
    2. 若节点X的右子树不为空,则节点X右侧的所有节点值都大于这个节点的值。
  2. 根据上述条件可以构造一个示例二叉搜索树,如下:
    在这里插入图片描述

  3. 先手写一下三种遍历方式的结果:
    在这里插入图片描述

  4. 接下来我们用代码构造出这个二叉搜索树和遍历过程

# 二叉搜索树python3实现
class BST:
    def __init__(self, value):
        # 每一个节点都可以看作是一个小的二叉树,都有左子树和右子树,只不过有的是空有的不是空
        self.value = value
        self.left = None
        self.right = None


def previousTraversal(tree, array=[]):
    if tree is None:
        return []
    else:
        # 前序遍历:先根再左最后右
        array.append(tree.value)
        previousTraversal(tree.left, array)
        previousTraversal(tree.right, array)
    return array


def middleTraversal(tree, array=[]):
    if tree is None:
        return []
    else:
        # 中序遍历:先左再根最后右
        middleTraversal(tree.left, array)
        array.append(tree.value)
        middleTraversal(tree.right, array)
    return array


def postTraversal(tree, array=[]):
    if tree is None:
        return []
    else:
        # 后序遍历:先左再右最后根
        postTraversal(tree.left, array)
        postTraversal(tree.right, array)
        array.append(tree.value)
    return array

        
# 先从根节点开始
bst = BST(20)
# 再到根节点的左子树和右子树
# 左子树
bst.left = BST(14)
bst.left.left = BST(9)
bst.left.right = BST(19)
bst.left.right.left = BST(18)
# 右子树
bst.right = BST(23)
bst.right.left = BST(21)
bst.right.right = BST(27)
bst.right.right.left = BST(24)
bst.right.right.right = BST(30)
print(u'前序遍历:')
print(previousTraversal(bst, array=[]))
print(u'中序遍历:')
print(middleTraversal(bst, array=[]))
print(u'后序遍历:')
print(postTraversal(bst, array=[]))

结果:

前序遍历:
[20, 14, 9, 19, 18, 23, 21, 27, 24, 30]
中序遍历:
[9, 14, 18, 19, 20, 21, 23, 24, 27, 30]
后序遍历:
[9, 18, 19, 14, 21, 24, 30, 27, 23, 20]

根上面手写的对比一下是一致的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值