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

    For example, if the input contains

       12
       4
       19
       6

   the program should output

       4
       6
       12
       19

不过,我需要用树来做这件事。我可以使用两个函数insertavldeleteavl。他们的定义是这样的…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);
   }
}

但这并不是按升序打印的。有什么建议会有帮助吗?提前谢谢!

最佳答案

提示:in-order traversal上的BST按升序迭代元素。
因为avl树是bst的一个特定实现,所以它也适用于这里。
编辑:解释-为什么在bst上按顺序遍历的属性是正确的?
在order trvaersal中,在访问了左子树中的所有节点之后,可以访问[打印]每个节点。因为在bst中,根比左子树中的所有节点都大,这就是我们想要的。
另外,在顺序遍历中,在访问右子树中的所有元素之前访问每个节点,再次,因为它是一个bst-这正是我们想要的。
注:这不是一个正式的证明,只是一个直观的解释,为什么它是真的。

关于c - 从AVL树按升序打印(排序),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9557745/

10-10 03:52