关于学习二叉搜索树的心得体会

   首先,二叉搜索树是建立在此树是一棵中序遍历的二叉树的前提下的,基本原理也就是先将关键值与根节点进行比较,如果比根节点的data值小,就在此树的左树中去寻找,如果比根节点的data值大,就在该树的右子树中去找,当然,如果关键值和根节点的data值相等,就是找到了。实际上就是一个简单的递归调用。需要注意的是,同样一组数据,选择不同的树做根结点,所建立的二叉搜索树结果是不同的。

BSTNode<Type>* Search(BSTNode<Type> *t, const Type &key)const
{
if(t == NULL)
return NULL;
if(t->data == key)
return t;
else if(key < t->data)
Search(t->leftChild, key);
else
Search(t->rightChild, key);
}

其实二叉搜索树的其他性质基本都是在像这样循环调用。下面将简单列举几个:

(1).二叉树的插入。

         1.第一步,搜索要插入的值在二叉树中是否已经存在,如果存在,则不需要插入,直接返回就好。如果不存在,在进行插入。

         2.插入时,要根据值去插入,保证它在插入之后的大小顺序,逐层遍历,如果比根节点的值小在根节点的左子树中去寻找合适位置,如果比根节点的值大就去右子树中寻找合适位置插入,始终保证左结点比根节点小,右子树比根节点大。

bool Insert(BSTNode<Type> *&t, const Type &x)
{
if(t == NULL)


{
t = new BSTNode<Type>(x);
return true;
}
else if(x < t->data)
Insert(t->leftChild, x);
else if(x > t->data)
Insert(t->rightChild, x);
else 
return false;
}

(2).二叉搜索树结点的删除。

关于结点删除有三种分类

1.该节点没有孩子结点,直接删除。

2.该节点有左孩子或者有后孩子,删除该节点后让孩子结点顶替自身位置,与上层树进行连接。

3.该节点既有左孩子又有后孩子,删除后就要考虑那个结点要顶替自身位置,与上层树连接的问题。

如果是左子树顶替,就在左子树中找到最大值去頂位,如果是右子树,就在右子树中找到最小的去顶替。

以上三种情况,同样采用的是递归调用。

bool Remove(BSTNode<Type> *&t, const Type &key)
{
if(t == NULL)
return false;
if(key < t->data)
Remove(t->leftChild, key);
else if(key > t->data)
Remove(t->rightChild, key);
else
{
if(t->leftChild==NULL && t->rightChild==NULL)
{
delete t;
t = NULL;
}
else if(t->leftChild!=NULL && t->rightChild==NULL)
{
BSTNode<Type> *p = t;
t = p->leftChild;
delete p;
}
else if(t->leftChild==NULL && t->rightChild!=NULL)
{
BSTNode<Type> *p = t;
t = p->rightChild;
delete p;
}
else
{
BSTNode<Type> *p = t->rightChild;
while(p->leftChild != NULL)
p = p->leftChild;
t->data = p->data;
Remove(t->rightChild, p->data);
}


return true;
}
}

其余的求最大,最小,置空就不一一写了,欢迎指教,技术菜鸟而已,不要太暴躁,我这人经不起批评委屈

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值