gpt4 book ai didi

java - AVL 树中序遍历不起作用

转载 作者:行者123 更新时间:2023-11-30 11:48:22 24 4
gpt4 key购买 nike

我的 AVL 树是在 Java 中使用一个二维整数数组 avlTree[35][5] 实现的 - 列表示:

  • [0] - 左侧高度
  • [1] - 左 child
  • [2] - 数据
  • [3] - 右 child
  • [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);
}
}
}

最佳答案

我写了这个测试程序:

public class AVLTree {

/*
[0] - Height Left
[1] - Left Child
[2] - Data
[3] - Right Child
[4] - Height Right.
*/
private static int[][] avlTree;

public static void main(String[] args) {
avlTree = new int[4][5];

// root (L: 1; R: 3)
avlTree[0][0] = 0;
avlTree[0][1] = 1;
avlTree[0][2] = 3005;
avlTree[0][3] = 2;
avlTree[0][4] = 1;

// parent: root (L: -1; R: -1)
avlTree[1][0] = 0;
avlTree[1][1] = -1;
avlTree[1][2] = 73375;
avlTree[1][3] = -1;
avlTree[1][4] = 0;

// parent: root (L: 3; R: -1)
avlTree[2][0] = 0;
avlTree[2][1] = 3;
avlTree[2][2] = 831954;
avlTree[2][3] = -1;
avlTree[2][4] = 0;

// parent: 2 (L: -1; R: -1)
avlTree[3][0] = 0;
avlTree[3][1] = -1;
avlTree[3][2] = 7485;
avlTree[3][3] = -1;
avlTree[3][4] = 0;

inOrder(0);
}

private static void inOrder(int root) {
if(root == -1) {
// nothing to do
return ;
}

// call function with left child
inOrder( avlTree[root][1] );

// print root
System.out.println( avlTree[root][2]);

// call function with right child
inOrder( avlTree[root][3]);
}
}

并且输出符合预期:

73375
3005
7485
831954

我对你的代码也没有问题;它在我的测试中工作正常。也许你的树是假的?如果没有,我还建议使用 -1 作为右/左 child ;否则它有点误导,因为 0 可能意味着位置 0 的节点。

关于java - AVL 树中序遍历不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8852475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com