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

时间:2012-03-04 18:43:44

标签: c algorithm sorting avl-tree

我需要定义一个读取整数的主函数,然后按升序打印它们。

    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);    
   }    
}

但是这不会按升序打印它们。任何的意见都将会有帮助?提前谢谢!

1 个答案:

答案 0 :(得分:3)

提示: in-order traversal BST 按升序迭代元素。

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

编辑:说明 - 为什么BST上的有序遍历的这个属性是正确的?

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

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

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