zoukankan      html  css  js  c++  java
  • 二叉排序树

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

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

     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 }
  • 相关阅读:
    swiper把左右箭头放到外侧
    vue复制地址栏链接:clipboard
    移动端适配rem.js
    vue登录弹框
    vue使用vue-aplayer(还用了SiriWave波形动画插件)
    vue 锚点定位,并平滑过渡
    vue引入scss报错:scss版本太高
    Kylin |3.Cube的优化
    Kylin |2.ModuleProject
    算法| 高级动态规划
  • 原文地址:https://www.cnblogs.com/itlqs/p/4750131.html
Copyright © 2011-2022 走看看