c - 从 AVL 树按升序(排序)打印

标签 c algorithm sorting avl-tree

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

    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 traversalBST按升序迭代元素。

由于AVL树是BST的具体实现,所以这里也适用。

编辑: 解释 - 为什么 BST 的中序遍历属性是正确的?

在有序 trvaersal 中,在访问左子树中的所有节点后访问 [print] 每个节点。由于在 BST 中根比左子树中的所有节点都大,这就是我们想要的。

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

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

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

相关文章:

创建 DAG 表格表示的算法?

java - 使用索引保留进行排序

python - 排序导入的文本文件?

c - C中的双重比较

algorithm - 哪些来源可以产生随机数据

algorithm - 点的对数绘图

java - 使用非西方字符对字符串进行排序

c - 如何检查数组中的元素是否等于 C 中的某个元素?

c - 如何删除获取文件名的路径

c - C中最大和最小指针地址