二叉排序树(Binary Search Tree,BST)

420 阅读1分钟

性质

二叉排序树又称为二叉查找树,是一种高效的数据结构。它是满足于以下性质的特殊二叉树:

  • 若它的左子树不空,则左子树所以结点的值均小于根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于根结点的值;
  • 它的左、右子树也都分别为二叉排序树。
  • 对二叉排序树进行中序遍历,将得到有序的递增数列。

二叉排序树的查找

核心思想:
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.如果新插入的元素比节点数据小,并且节点的左子树为空,则将新数据直接插入左节点的位置,
如果不为空,就再遍历左子树,查找插入位置。

代码: