C 从AVL树按升序(排序)打印

C 从AVL树按升序(排序)打印,c,algorithm,sorting,avl-tree,C,Algorithm,Sorting,Avl Tree,我需要定义一个主函数,它读取整数并按升序将它们打印回来 For example, if the input contains 12 4 19 6 the program should output 4 6 12 19 然而,我需要用树来做这件事。我可以使用两个函数insertavl,以及deleteavl。他们的定义是这样的。。。基本上,当调用deleteavl时

我需要定义一个主函数,它读取整数并按升序将它们打印回来

    For example, if the input contains

       12
       4
       19
       6

   the program should output

       4
       6
       12
       19
然而,我需要用树来做这件事。我可以使用两个函数
insertavl
,以及
deleteavl
。他们的定义是这样的。。。基本上,当调用deleteavl时,它会删除节点,并相应地重新平衡树 ... 如果有兴趣,他们的结构在:

到目前为止,我已经做到了:

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);    
   }    
}
但这并不是按升序打印的。有什么建议会有帮助吗?提前谢谢

提示:在一个is上以升序迭代元素。

由于AVL树是BST的特定实现,因此它也适用于此处

编辑:解释-为什么BST上顺序遍历的此属性正确

为了实现trvaersal,在访问左子树中的所有节点后,您可以访问[打印]每个节点。因为在BST中,根比左子树中的所有节点都大,这就是我们想要的

另外,在顺序遍历中,您在访问右子树中的所有元素之前访问每个节点,同样,因为它是一个BST-这正是我们想要的


(*)注意:这不是一个正式的证明,只是一个直观的解释为什么它是真的。

真的吗?在我制作完这棵树后,我所需要做的就是使用索引函数将其按升序排列?@初学者北约:看看我附加的维基百科链接,它有一个顺序遍历函数的伪代码,我认为这很容易。只要实现它并运行它,它就应该可以工作[除非程序的其他部分有缺陷]@初学者北约:我在BST中添加了对该属性的解释。因此,是的,您需要做的就是打印元素,以便使用inorder实现traversali,我不会使用deleteavl,我需要使用im preety舒尔。。。要释放节点?@初学者北约:是的,为了避免内存泄漏,您需要先删除所有节点,然后才能从
main()返回