这是我的任务
通过插入序列[2 7 9 4 1 5 3 6 0 8]运行程序,然后再次以升序打印出序列
import java.util.*;
class TestBinary {
public static void main(String [] args) {
BinarySearch tree = new BinarySearch();
tree.root = new BinaryNode(1);
tree.root.left = new BinaryNode(4);
tree.root.right = new BinaryNode(5);
tree.root.left.left = new BinaryNode(7);
tree.root.left.left.left = new BinaryNode(2);
tree.root.left.left.right = new BinaryNode(9);
tree.root.right.right = new BinaryNode(6);
tree.root.right.right.left = new BinaryNode(3);
tree.root.right.right.right= new BinaryNode(8);
tree.root.right.right.right.left = new BinaryNode(0);
System.out.println("This is in-order traversal:");
tree.inorder();
}
}
结果是:
这是预订遍历:
2794153608
我想按升序再次打印出来,该怎么办?
答案 0 :(得分:1)
2 7 9 4 1 5 3 6 0 8
如果您按该顺序插入一棵树,则应该期望这棵树
2
/ \
1 7
/ / \
0 4 9
/ \ /
3 5 8
\
6
请注意,对于任何给定节点,所有左元素都小于该元素,然后,所有右节点都大于该元素。如果您构建了足够多的树,您还将注意到该属性将始终为true,这就是为什么按顺序遍历应始终输出升序的原因
问题是您的主要方法,不一定是树类。插入数据时,您必须对树进行迭代并比较元素,而不仅仅是选择要选择哪个节点的位置,还需要手动分配字段。
正确插入节点后,顺序遍历将自然以升序打印数据
例如
BinarySearch tree = new BinarySearch();
int i = 0;
tree.root = new BinaryNode(data[i++]);
while(i < data.length) {
tree.add(tree.root, data[i++]);
}
tree.inOrder();