-
二叉搜索树是一种特殊的二叉树,它有以下几个特点:
- 若节点X的左子树不为空,则节点X左侧的所有节点值都小于这个节点的值;
- 若节点X的右子树不为空,则节点X右侧的所有节点值都大于这个节点的值。
-
根据上述条件可以构造一个示例二叉搜索树,如下:
-
先手写一下三种遍历方式的结果:
-
接下来我们用代码构造出这个二叉搜索树和遍历过程
# 二叉搜索树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]
根上面手写的对比一下是一致的