AVL树中序遍历不起作用
我的 AVL 树是在 Java 中使用二维整数数组 avlTree[35][5]
实现的 - 列表示:
- [0] - 左高度
- [1] - 左孩子
- [2] -数据
- [3] - 右孩子
- [4] - 右身高。
我从主程序调用以下方法,结果我得到三个节点:最左边的节点两次,然后是其父节点。
public void inorderTraversal(int root) {
if ((Main.avlTree[root][1] == 0) && (Main.avlTree[root][3] == 0)) {
System.out.println(Main.avlTree[root][2]);
} else {
if (Main.avlTree[root][1] != 0) {
root = Main.avlTree[root][1];
inorderTraversal(root);
}
System.out.println(Main.avlTree[root][2]);
if (Main.avlTree[root][3] != 0) {
root = Main.avlTree[root][3];
inorderTraversal(root);
}
}
}
My AVL tree is implemented in Java using a two-dimensional array of integers avlTree[35][5]
- The columns represent:
- [0] - Height Left
- [1] - Left Child
- [2] - Data
- [3] - Right Child
- [4] - Height Right.
I am calling the following method from the main program, and as a result I get three nodes: the leftmost node twice followed by its parent.
public void inorderTraversal(int root) {
if ((Main.avlTree[root][1] == 0) && (Main.avlTree[root][3] == 0)) {
System.out.println(Main.avlTree[root][2]);
} else {
if (Main.avlTree[root][1] != 0) {
root = Main.avlTree[root][1];
inorderTraversal(root);
}
System.out.println(Main.avlTree[root][2]);
if (Main.avlTree[root][3] != 0) {
root = Main.avlTree[root][3];
inorderTraversal(root);
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我写了这个测试程序:
输出符合预期:
我对你的代码也没有问题;在我的测试中效果很好。也许你的树是假的?如果没有,我还建议使用 -1 作为右/左孩子;否则会有点误导,因为 0 可能意味着位置 0 处的节点。
I wrote this test program:
and the output is as expected:
I have no problem with your code either; it works fine in my test. Maybe your tree is false? I would also suggest using -1 as the right / left child if there is none; otherwise it's a bit misleading because 0 could mean the node at positon 0.