数据结构.平衡二叉树.从二叉排序树到平衡二叉树

正在上数据结构的课程
感觉平衡二叉树很有对称的美感
所以决定首篇博客献给平衡二叉树

平衡二叉树其实是二叉排序树的一种提升

——那么什么是二叉排序树

  简单的讲,就是对于二叉排序树的每个节点,其左孩的值<该节点的值<右孩的值,且二叉排序树所有节点的值不重复。
如此一来,对二叉排序树进行LDR遍历的输出,便是一个递增的序列,也就是所谓的二叉“排序”树。

  由于这种有序的特点,那么查找树中的一个元素的时候,便可以产生类似“折半查找法”的效果:
1)折半查找法要求的就是一个有序的序列,二叉排序树对应的也是一个有序的序列。
2)对于要查找的元素elem

bool FindElem(BinarySortTreeNode * node,ElemType elem)
{
    if(node != NULL)
    {
        if(node->data == elem)//找到元素
            return true;
        else if(node->data > elem)//只需继续查找左子树
            return FindElem(node->LeftChild, elem);
        else if(node->data < elem)//只需继续查找右子树
            return FindElem(node->RightChild, elem);
    }
    else return false;
}

所以二叉排序树又称为二叉搜索树

——为什么说是“类似”折半查找:

  这和二叉排序树的建立有关。由于二叉排序树的特点,新加入的元素newElem要符合二叉排序树的有序状态,所以插入的时候
  

bool AddElem(BinarySortTreeNode*& node, ElemType newElem)
{
|   if(node != NULL)//当node非空
|   {
|   |   if(node->data == newElem)//已存在这个元素
|   |       return false;
|   |   else if(node->data > newElem)//按规则插入node左边
|   |       return AddElem(node->LeftChild, newElem);
|   |   else if(node->data < newElem)//按规则插入node右边
|   
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值