二叉搜索树
(1)什么是二叉搜索树
顾名思义,一个二叉搜索树是以一颗二叉树来组成的,如图所示。其中每一个节点代表一个对象。二叉搜索树中的key总是以满足二叉搜索树性质的方式来存储的,即对于根节点key,其左子树中的值都比其的值小,而又子树中的值都比key的值要大。
注意:大部分搜索树操作的最坏运行时间与数的树的高度成正比。
(2)二叉搜索树的三种遍历方式
1.中序遍历
二叉搜索树的性质允许我们通过一个简单的递归算法来按序输出树中的节点数据,这种算法称为中序遍历(inorder tree walk)算法。之所以这么命名是因为输出的子树根的值位于其左子树的节点值和右子树节点值之间。
下面使用一段伪代码来说明:
INORDER-TREE-WALK(x)
if x != null
INORDER-TREE-WALK(x.left)
print x.key
INORDER-TREE-WALK(x.right)
中序遍历后的顺序是: 【2,5,9,12,15,16,17,18,19】
2.先序遍历
PREORDER-TREE-WALK(x)
if x != null
print x.key
PREORDER-TREE-WALK(x.left)
PREORDER-TREE-WALK(x.right)
先序遍历后的顺序是: 【12,5,2,9,18,15,17,16,19】
3.后序遍历
POSTORDER-TREE-WALK(x)
if x != null
POSTORDER-TREE-WALK(x.left)
POSTORDER-TREE-WALK(x.right)
print x.key
后序遍历后的顺序是: 【2,9,5,16,17,15,19,18,12】
从以上代码中可以推断出,遍历一颗有n个节点的二叉搜索树所需要的时间复杂度为O(n)。
未完待续…