• 二叉排序树


      二叉排序树与快排的思想差不多,只不过这里用到了二叉树的数据结构。对于这个二叉树满足,每个节点都满足左子树每个值都比它小,右子树每个值都比它大。这样,中序遍历这个树就可以得到升序结果。

      这里可以看出,关键问题是,怎么把一个结点插入到他应该在的位置,实现二叉排序树的构建过程。用到的是一个递归操作。代码如下:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 #define newp (tree*)malloc(sizeof(tree))  //申请地址的宏定义 
     5 
     6 typedef struct _tree{
     7     int data;
     8     struct _tree *l,*r;    //树结点类型 
     9 }tree;
    10 
    11 void insert(tree ** newroot,tree* s)   //插入一个结点的函数 
    12 {
    13     if (*newroot==NULL) (*newroot)=s;
    14     else{
    15         if ((*newroot)->data<(s->data)) insert(&((*newroot)->r),s);
    16         if ((*newroot)->data>(s->data)) insert(&((*newroot)->l),s);
    17     }
    18 }
    19 
    20 void inorder(tree * newroot)  //中序遍历 
    21 {
    22     if (newroot!=NULL)
    23     {
    24         inorder(newroot->l);
    25         printf("%d ",newroot->data);
    26         inorder(newroot->r);
    27     }
    28 }
    29 
    30 int main()
    31 {
    32     int n,i,x;
    33     tree * root=NULL,*s;
    34     scanf("%d",&n);
    35     for (i=0;i<n;i++)
    36     {
    37         scanf("%d",&x);
    38         s=newp;
    39         s->data=x;
    40         s->l=NULL;
    41         s->r=NULL;
    42         insert(&root,s);
    43     } 
    44     inorder(root);
    45     return 0;
    46 }
  • 相关阅读:
    数据库索引的作用和长处缺点
    ping不通的几种可能原因
    UVA
    strtok、strtok_s、strtok_r 字符串切割函数
    CheckBoxPreference组件
    EM算法原理
    Android中ExpandableListView控件基本使用
    拓扑排序的原理及事实上现
    DropdownList绑定的两种方法
    leetcode第一刷_Length of Last Word
  • 原文地址:https://www.cnblogs.com/itlqs/p/4750131.html
Copyright © 2020-2023  润新知