性质
二叉排序树又称为二叉查找树,是一种高效的数据结构。它是满足于以下性质的特殊二叉树:
- 若它的左子树不空,则左子树所以结点的值均小于根结点的值;
- 若它的右子树不空,则右子树上所有结点的值均大于根结点的值;
- 它的左、右子树也都分别为二叉排序树。
- 对二叉排序树进行中序遍历,将得到有序的递增数列。
二叉排序树的查找
核心思想:
1. 若给定值等于根结点的关键字,则查找成功
2. 若给定值小于根结点的关键字,则继续在左子树上查找
3. 若给定值大于根结点的关键字,则继续在右子树上进行查找
代码:
迭代:
func Find(tree *TreeNode, value int) *TreeNode {
q := tree
for q != nil {
if q.Val == value {
return q
}
if q.Val > value {
q = q.Left
} else {
q = q.Right
}
}
return nil
}
递归:
func SearchBst (tree *TreeNode, value int) *TreeNode {
if tree == nil {
return nil
} else if tree.Val == value {
return tree
} else if tree.Val > value {
return SearchBst(tree.Left, value)
} else {
return SearchBst(tree.Right, value)
}
}
二叉树的插入
核心思想:
1.如果新插入的元素比节点数据大,并且节点的右子树为空,则将新数据直接插入右节点的位置,
如果不为空,就再遍历右子树,查找插入位置。
2.如果新插入的元素比节点数据小,并且节点的左子树为空,则将新数据直接插入左节点的位置,
如果不为空,就再遍历左子树,查找插入位置。
代码: