二叉查询树的实现

因为在关联容器里面主要的内部结构是RB-tree,而红黑树又是一种平衡二叉树,平衡二叉树又是属于二叉查询树,所以按照 侯捷介绍的顺序依次来实现,今天先把二叉查询树这种最简单的实现掉:

首先,二叉查询树 不像heap中完全二叉树那样内存分配用线性存储的,二叉查询树一般内部存储是通过链表来实现的,首先来看每个节点的数据结构:

 

每个节点都包含了它的孩子节点信息,这样可以很方便的向下递归查询。

因为二叉查询树是要求 左子节点<父节点<右子节点。根据每个节点的结构,我们在树中只需要包含root节点就可以遍历到整个树了,所以在树中,我们必须包含root 节点,而且只需要root 节点就可以了,所以在tree中我们的成员变量为:

 

private:

PNODE               root;

其中的PNODE 是节点指针类型  即:  node<T>* 

如果我们要插入数据到树中,那么我们只需要下面几步就可以了:

 

1.给需要插入的值 分配一个节点空间。

2.通过递归找到需要插入的地方,即找到他的父节点。

3.把这个节点地址赋给父节点的左孩子或者右孩子。

首先实现第一步:

 

那么 2,3怎么来实现呢:

通过一个递归函数:

 

同样,如果我们要删除一个元素,那么 我们也可以通过下面步骤:

1.找到需要填充到这个位置的叶子节点。

2.把叶子节点的值赋给要删除的这个元素。

3.删除这个叶子节点。

关键是第一步,怎么找到要替换的节点,其实我们只要找到以这个节点为跟节点的子树中比这个节点稍大点的节点就可以了,怎么找到比这个节点稍大点呢,就是这个节点的右子树中最左边的一个叶子节点。

 

其中 destroyNode是指删除指定空间。 

 

完整代码如下:

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值