| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5417 人关注过本帖
标题:AVL树(迭代版本)
取消只看楼主 加入收藏
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
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
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
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
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 33楼 九转星河
摁。我整理下实现的思路。


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-13 13:53
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 35楼 九转星河
用一个域来记录高度信息并不困难,难的是发生旋转之后整颗树的高度修正。
递归很容易,在‘归’阶段就完成了修正。
但是迭代,我还真没想到好的办法,目前所想的办法,就是做一个标记,如果旋转发生,修改标记,但旋转完成之后,检查标记,而后再来一次遍历,逐一修正高度信息。

[此贴子已经被作者于2017-6-13 15:33编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-13 15:32
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 37楼 psy134820
截图完整的错误信息或者复制也可以

[此贴子已经被作者于2017-7-5 20:48编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-07-05 20:47
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 39楼 psy134820
错误信息!!!!!我不需要报错行数。

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



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

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