帮忙改下错误-AVL树 本帖最后由 psp_66 于 2012-06-02 15:04:39 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你对应行号,看看那里的对象引用是否 为null.有则改之 无则加勉。 Debug后还是改不对继续求帮忙 if(lh < rh){ // 右の子が高い AVL_Node A=p,B=p.right; AVL_Node X=A.left, Y=B.left, Z=B.right; if(rlh<rrh){ // 右の右の孫が高い:1重回転 B.left=A; A.right=Y; A.h=lh+1; return B; } else {//右の左の孫が高い:2重回転 AVL_Node C=Y, Y1=C.left, Y2=C.right;//这行 C.left=A; C.right=B; A.right=Y1; B.left=Y2; A.h=lh+1; B.h=rrh+1; C.h =A.h+1; return C; } }好好看看你这段代码,其实你的p.right里面的right和left都是空的,所以b的right和left都是空的,所以Y是空的所以C是空的所以 Y1=C.left, Y2=C.right当然会抛空指针 但是不会改 劳驾帮改下求AVL树的高。 if(lh < rh){ // 右の子が高い AVL_Node A=p,B=p.right; AVL_Node X=A.left, Y=B.left, Z=B.right; if(rlh<rrh){ // 右の右の孫が高い:1重回転 B.left=A; A.right=Y; A.h=lh+1; return B; } else {//右の左の孫が高い:2重回転 AVL_Node C=Y, Y1=C.left, Y2=C.right; C.left=A; C.right=B; A.right=Y1; B.left=Y2; A.h=lh+1; B.h=rrh+1; C.h =A.h+1; return C; } }else{ AVL_Node A=p, B=p.left; AVL_Node X=B.left, Y=B.right, Z=A.right; if(llh>lrh){/* 左の左の孫が高い:1重回転*/ B.right=A; A.left=Y; A.h=rh+1; return B; } else {/*左の右の孫が高い:2重回転*/ AVL_Node C=Y, Y1=C.left, Y2=C.right; C.left=B; C.right=A; B.right= Y1; A.left=Y2; B.h=llh+1; A.h=rh+1; C.h=B.h+1; return C; } }这样就好 大家一起讨论一下spring mvc框架的优缺点 SWT Text 问题! 关于数组的列表。。。。。。。 如何让java程序后台运动(星际2菜鸟玩家求助) Double 引用传递问题? 如何修正这个错误.菜鸟求教 关于鼠标事件的问题 关于检测输入得问题,困惑好几天了,希望大哥门解答 JDBC连接ORACLE 我想学JAVA,是学VISUAL J++还是J++BUILDER,请高人指点,一定给分 去掉字符串中的非字符 请问这个的UML类图怎么画?
AVL_Node A=p,B=p.right;
AVL_Node X=A.left, Y=B.left, Z=B.right;
if(rlh<rrh){ // 右の右の孫が高い:1重回転
B.left=A; A.right=Y;
A.h=lh+1;
return B;
} else {//右の左の孫が高い:2重回転
AVL_Node C=Y, Y1=C.left, Y2=C.right;//这行
C.left=A; C.right=B; A.right=Y1; B.left=Y2;
A.h=lh+1; B.h=rrh+1; C.h =A.h+1;
return C;
}
}
好好看看你这段代码,其实你的p.right里面的right和left都是空的,
所以b的right和left都是空的,
所以Y是空的
所以C是空的
所以 Y1=C.left, Y2=C.right当然会抛空指针
if(lh < rh){ // 右の子が高い
AVL_Node A=p,B=p.right;
AVL_Node X=A.left, Y=B.left, Z=B.right;
if(rlh<rrh){ // 右の右の孫が高い:1重回転
B.left=A; A.right=Y;
A.h=lh+1;
return B;
} else {//右の左の孫が高い:2重回転
AVL_Node C=Y, Y1=C.left, Y2=C.right;
C.left=A; C.right=B; A.right=Y1; B.left=Y2;
A.h=lh+1; B.h=rrh+1; C.h =A.h+1;
return C;
}
}else{
AVL_Node A=p, B=p.left;
AVL_Node X=B.left, Y=B.right, Z=A.right;
if(llh>lrh){/* 左の左の孫が高い:1重回転*/
B.right=A; A.left=Y;
A.h=rh+1;
return B;
} else {/*左の右の孫が高い:2重回転*/
AVL_Node C=Y, Y1=C.left, Y2=C.right;
C.left=B; C.right=A; B.right= Y1; A.left=Y2;
B.h=llh+1; A.h=rh+1; C.h=B.h+1;
return C; }
}
这样就好