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]

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您演示用Python构建二叉搜索树遍历的代码。以下是示例代码: ```python class TreeNode: def __init__(self, val=None): self.val = val self.left = None self.right = None class BST: def __init__(self): self.root = None def insert(self, val): if not self.root: self.root = TreeNode(val) return curr = self.root while curr: if val < curr.val: if not curr.left: curr.left = TreeNode(val) return curr = curr.left else: if not curr.right: curr.right = TreeNode(val) return curr = curr.right def inorder(self, node): if not node: return self.inorder(node.left) print(node.val, end=' ') self.inorder(node.right) def preorder(self, node): if not node: return print(node.val, end=' ') self.preorder(node.left) self.preorder(node.right) def postorder(self, node): if not node: return self.postorder(node.left) self.postorder(node.right) print(node.val, end=' ') # 创建一个二叉搜索树并插入元素 bst = BST() bst.insert(8) bst.insert(3) bst.insert(1) bst.insert(6) bst.insert(10) bst.insert(14) bst.insert(4) bst.insert(7) bst.insert(13) # 中序遍历 print("Inorder Traversal:") bst.inorder(bst.root) print() # 前序遍历 print("Preorder Traversal:") bst.preorder(bst.root) print() # 后序遍历 print("Postorder Traversal:") bst.postorder(bst.root) print() ``` 输出结果: ``` Inorder Traversal: 1 3 4 6 7 8 10 13 14 Preorder Traversal: 8 3 1 6 4 7 10 14 13 Postorder Traversal: 1 4 7 6 3 13 14 10 8 ``` 以上代码中,我们定义了一个 `TreeNode` 类和一个 `BST` 类,分别表示二叉搜索树中的节点和二叉搜索树本身。在 `BST` 类中,我们实现三种遍历方法:中序遍历、前序遍历和后序遍历。我们还定义了一个 `insert` 方法,用于将元素插入到二叉搜索树中。 在测试代码中,我们创建了一个二叉搜索树并插入了一些元素,然后分别进行了中序遍历、前序遍历和后序遍历

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值