我需要定义一个读取整数的主函数,然后按升序打印它们。
For example, if the input contains
12
4
19
6
the program should output
4
6
12
19
然而,我需要使用树来做到这一点。我可以使用两个函数insertavl
和deleteavl
。他们的定义就像这样...... http://ideone.com/8dwlU基本上当调用deleteavl时它会删除节点,并相应地重新平衡树
......如果感兴趣的他们的结构在:http://ideone.com/QjlGe。
到目前为止我已经得到了这个:
int main (void) {
int number;
struct node *t = NULL;
while (1 == scanf("%d",&number)) {
t = insertavl(t, number);
}
while (t != NULL){
printf("%d\n",t->data);
t = deleteavl(t, t->data);
}
}
但是这不会按升序打印它们。任何的意见都将会有帮助?提前谢谢!
答案 0 :(得分:3)
提示: in-order traversal BST 按升序迭代元素。
由于AVL树是BST的特定实现,因此它也适用于此。
编辑:说明 - 为什么BST上的有序遍历的这个属性是正确的?
在有序trvaersal中,在访问左子树中的所有节点后访问[print]每个节点。因为在BST中,根比左子树中的所有节点都大,这是我们想要的。
此外,在有序遍历中,您在访问右子树中的所有元素之前访问每个节点,并且再次,因为它是BST - 这正是我们想要的。
(*)注意:这不是一个正式的证明,只是一个直观的解释为什么它是真的。