| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4197 人关注过本帖, 1 人收藏
标题:avl树的新算法,欢迎测试并指出不足
只看楼主 加入收藏
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:0 
回复 10楼 renkejun1942
多谢@renkejun1942,意见都非常中肯,程序还有不少地方还需精简提炼,我现在担心的是算法是否正确,没来得及作全面测试

一切都在学习、尝试、摸索中
2017-07-30 20:02
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 11楼 marlow
应该是正确的,我编译运行了一下。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-07-30 20:48
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
今天下午没开电脑~既然r版已经提出意见了~我……还是给自己缓冲一下~就先放自己一马吧~有机会我再过来看看~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-07-30 20:50
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 13楼 九转星河
我的意见仅仅皮毛而已,根本不是针对算法的。
代码我也还在看,还在理解高度修正。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-07-30 21:01
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 14楼 renkejun1942
高度差用1 0 -1标记~这个是相对高度差~

这思想有点类似于红黑树~

如果真的要具体测试还要花不少时间耶~

意见如果高级一点~~~左孩子指针和右孩子指针可以用一个二元数组来关联~
这样左旋和右旋以及删除节点操作调用分别参数0 1再用 child和!child关联就能节省代码量了~而且还可以体现出操作的对称性质~

我那个泛型二叉树的部分结构是这样的~当然很久没有弄了~感觉我那个还有很大的提升空间~
程序代码:
typedef struct Tree_Node
{

 //   Tree_Root* ID;
//    Tree_Location location;
    struct Tree_Node* child[2];
    struct Tree_Node* p;
    void* data;

}Tree_Node;


[此贴子已经被作者于2017-7-30 21:22编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-07-30 21:19
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:0 
回复 15楼 九转星河
代码是可以少敲几个,但程序的可读性可维护性也会因此而受损,我也是中断学习好几个月了,还有好几个数据结构没理清楚~~~

一切都在学习、尝试、摸索中
2017-07-30 21:42
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 16楼 marlow
这样听了你的评价后我也对知道自己的结构了解一些了~看了一下用相对高度标记AVL树在网上可以搜到类似的代码~打算参考网上的写法再来看看~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-07-30 21:56
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:0 
回复 17楼 九转星河
bf叫平衡因子,刚测试发现删除函数出了大问题(插入函数应该没有问题,大部分照书码的),估计是平衡因子的调整没弄好,等弄好了再来更新。。。

[此贴子已经被作者于2017-7-30 22:29编辑过]


一切都在学习、尝试、摸索中
2017-07-30 22:27
GBH1
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:112
专家分:510
注 册:2017-6-13
收藏
得分:15 
AVL树失去平衡时的情况一定是LL、LR、RL、RR这4种之一,只是经过变换的次数、顺序不同。RR 和LL 只需单次旋转,而LR和RL旋转次数取决于高度差。你的代码看起来确实比较新颖。点赞,只是有些变量在定义时语义不清,如果对AVL树不是很了解的话,很难看懂啊。要是能画个简图描述一下你的算法过程就好懂多了。
2017-07-31 23:43
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:0 
回复 19楼 GBH1
这种算法本来是来帮助学习和理解AVL树的,却变成了学会了AVL树才能理解这种算法教材上介绍的也很简单:
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

RR和RL是前两者的镜像旋转,删除操作是插入操作的反向变换。

一切都在学习、尝试、摸索中
2017-08-02 08:16
快速回复:avl树的新算法,欢迎测试并指出不足
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048789 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved