| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5492 人关注过本帖
标题:AVL树(迭代版本)
只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 19楼 renkejun1942
我那个代码也有个小问题(或许叫不上问题吧)~100个数据插入正常来说高度应该为7~不过我那个高度却为8~1000个高度正常来说应该为10~不过我那个高度却为12~我可有那个网上参考代码对比的~怎么感觉我那个高度总是相差那么一点~有时间能帮忙看看么?~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-12 18:13
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 21楼 九转星河
你的代码我昨天复制下来,编译了一下,发现有几个警告,但是当时我又在写自己的代码,所以没跟你说。

不过当时我运行了一下,输入相同的10个数字,1-10的序列,采用前序遍历,你的代码和我的结果不同。

以下是警告信息:

AVLTREE.c: In function 'main':
AVLTREE.c:52:9: warning: unused variable 'k' [-Wunused-variable]
     int k=0;
         ^
AVLTREE.c: At top level:
AVLTREE.c:87:1: warning: return type defaults to 'int' [-Wimplicit-int]
 Tree_Insert(PTree* t,ElemType data,int (*Comp)(const void* p1,const void* p2))
 ^
AVLTREE.c: In function 'Tree_Insert':
AVLTREE.c:95:20: warning: passing argument 1 of 'Creat_Node' from incompatible pointer type [-Wincompatible-pointer-types]
         Creat_Node(t,sizeof(Tree));
                    ^
AVLTREE.c:66:6: note: expected 'void **' but argument is of type 'struct Tree **'
 void Creat_Node(void** p,size_t size)           //创建一个节点

[此贴子已经被作者于2017-6-12 18:21编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-12 18:16
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 21楼 九转星河
图片附件: 游客没有浏览图片的权限,请 登录注册


上面的是我的代码的结果,下面是你的。
不过我没挖下去。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-12 18:18
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 21楼 九转星河
不对耶,我的代码,1000个随机数的结果是,左树高9,右树9。
多试了几次,结果在9 和 10波动
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2017-6-12 18:23编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-12 18:20
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 24楼 renkejun1942
你的是叶子节点是-1~而我那边叶子节点高度为0~所以感觉我那个还是要看看才行~那些警告应该是数据类型问题~通过强制转型应该可以解决了~我到时也试试用非迭代的插入方法改改看看~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-12 18:27
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 25楼 九转星河
好啊,到时候可以借鉴下你怎么修正高度问题。

慢慢来呗,想不到的东西就先丢一边,我前段时间都有点想丢开AVL树,进入散列的,就是因为高度问题我一直没想到解决的办法。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-12 18:33
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 26楼 renkejun1942
就是空间换时间呗~在节点域增加一个高度标记~回溯的时候调节高度差就可以了~当然要有一个方法判断最大高度是否发生变化~今晚看看我能不能再看看代码~如果困就先睡觉去了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-12 19:15
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 21楼 九转星河
我再一次看了一下你的代码。
当然我看的是结果:输入的数据是0-9的序列。
你的代码的结果是 3 0 1 2 4 5 6 7 8 9
看出来了吗?你的代码在旋转上不彻底,以致生成的树并不是严格的平衡树。

产生的结果是右树很深,但左树……,为什么会这样,你的代码依赖关系太复杂,很抱歉,我短时间内恐怕不能仔细去看,所以只能从结果上分析。

           3
         0    4
          1      5
           2         6
                       7
                         8
                          9

[此贴子已经被作者于2017-6-12 19:37编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-12 19:32
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 28楼 renkejun1942
你那个前序遍历图有问题吧~试试直接输出节点值来解释数据~感觉我那个前序遍历很神奇啊~除了根节点外~其余都是按顺序输出的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-12 20:14
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 29楼 九转星河
你的前序遍历是有问题,你自己检查下吧。

我重写了前序遍历,得到的结果如下:
3 1 0 2 7 5 4 6 8 9

从根节点看,你的树右树比左树深1,比较平衡。

明天要很早很早上班,我睡觉去了。今天的所有问题,留待以后吧。


[此贴子已经被作者于2017-6-12 20:29编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-12 20:25
快速回复:AVL树(迭代版本)
数据加载中...
 
   



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

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