博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[算法]哈希表二叉树
阅读量:4664 次
发布时间:2019-06-09

本文共 1452 字,大约阅读时间需要 4 分钟。

转自:

 PS:此作者写的一步一步写算法还是比较好理解的

用过平衡二叉树的朋友都清楚,平衡二叉树的最大优点就是排序。不管是在数据插入的时候还是在数据删除的时候,我们都要考虑到数据的排序情况。但是和数据的添加、删除一样重要的,还有数据的查询。很不幸,平衡二叉树经常由于节点的添加和删除,数据的查询效率会变得非常低下。朋友们可以看看下面这样的一个极端场景,所有分支节点都只有一边存在数据:

 

/**         7        3*        /           \*       6             4*      /                \*     5                  7*    /                    \*   2                     12*  /                        \* 1                         20*/

 

 

    上面的这幅图很能说明问题,虽然查询7、6很方便,但是查询5、2、1的时候效率就非常低了,右边的二叉树也是这种情况。那么有没有办法使得数据之间的查找效率不至于相差太大呢?截止目前为止,主要有下面三种方法:

 

    (1)哈希二叉树

    (2)avl树

    (3)红黑树

     今天我们主要讲解的内容就是哈希树。其他两个内容会在后面的博客里面介绍。

    那么什么是哈希树呢?其实也非常简单,就是我们在二叉树节点中添加一个next指针,同时建立一个hash表,这样我们在查询数据的时候就可以直接利用hash查询代替平衡二叉树的查询了。一般来说,哈希树的节点应该是这样定义的:

 

typedef struct _HASH_TREE{	int data;	struct _HASH_TREE* next;	struct _HASH_TREE* left;	struct _HASH_TREE* right;}HASH_TREE;

    其实,相比较普通的平衡二叉树而言,也就是多了一个next指针而已,那么这个next指针什么时候需要处理呢?主要就是在添加节点和删除节点的时候处理。

 

 

STATUS add_node_into_tree(HASH_TREE** ppHash, int data){	/* add hash node into tree */	/* add hash node into hash table */	return TRUE;}

    添加的代码如此,删除工作也比较类似。

 

 

STATUS delete_node_from_tree(HASH_TREE** ppHash, int data){	HASH_TREE* pNode;	/* delete hash node from tree, but not free space*/		/* delete hash node from hash table */		free(pNode);	return TRUE;}

说明:

 

    (1)哈希二叉树的思想比较重要,同学们最好弄清楚为什么要建立hash二叉树?

    (2)上面的代码不是很完整,对hash表不熟悉的朋友可以参考我写的这一篇博客(),二叉树添加删除不熟悉的朋友同样可以参考我写的另外一篇博客(,,,),把两部分代码按照上面给出的结构合起来基本上就可以实现哈希二叉树了。

转载于:https://www.cnblogs.com/lyggqm/p/5252941.html

你可能感兴趣的文章
linux试题
查看>>
Windows Phone 7 Coding4Fun控件简介
查看>>
【并发编程】【JDK源码】J.U.C--线程池
查看>>
英语口语练习系列-C08-考试
查看>>
练习6.28、6.29
查看>>
mysql中 key 、primary key 、unique key 和 index 有什么不同
查看>>
java 多线程笔记
查看>>
C#中的委托(Delegates in C#)- part two
查看>>
JDBC中级篇(MYSQL)——处理文件(BLOB)
查看>>
jabRef里引用的相邻同名作者变横线
查看>>
【洛谷 2888】牛栏
查看>>
Java PDF页面设置——页面大小、页边距、纸张方向、页面旋转
查看>>
Spring AOP 的实现机制
查看>>
74.VS2013和opencv3.1.0安装教程
查看>>
doviceone- http组件进行webservice的POST请求
查看>>
Killer Problem (UVA 11898 )
查看>>
MVC模式在Java web应用程序中的实现
查看>>
五种开源协议的比较
查看>>
递推和递归Number Sequence
查看>>
一.多线程技能
查看>>