• 创建排序二叉树


    全部代码

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <assert.h>
      4 
      5 typedef struct node
      6 {
      7     int nValue;
      8     struct node *pLeft;
      9     struct node *pRight;
     10 }BiTree;
     11 
     12 void Add(BiTree **ppRoot, int nNum)
     13 {
     14     BiTree *pTemp = NULL;
     15     BiTree *pNode = NULL;
     16 
     17     assert(ppRoot!=NULL);
     18 
     19     //临时节点开辟空间
     20     pTemp = (BiTree *)malloc(sizeof(BiTree));
     21     if(NULL == pTemp)
     22     {
     23         printf("pTemp空间分配失败!
    ");
     24         exit(-1);
     25     }
     26     pTemp->nValue = nNum;
     27     pTemp->pLeft = NULL;
     28     pTemp->pRight = NULL;
     29 
     30     //空树
     31     if(NULL == *ppRoot)
     32     {
     33         *ppRoot = pTemp;
     34         return;
     35     }
     36 
     37     pNode = *ppRoot;
     38 
     39     //非空树
     40     while(pNode != NULL)
     41     {
     42         //比根大
     43         if(nNum > pNode->nValue)
     44         {
     45             //向右走
     46             if(NULL == pNode->pRight)
     47             {
     48                 pNode->pRight = pTemp;
     49                 return;
     50             }
     51             else
     52             {
     53                 pNode = pNode->pRight;
     54             }
     55         }
     56         //比根小
     57         else if(nNum < pNode->nValue)
     58         {
     59             //向左走
     60             if(NULL == pNode->pLeft)
     61             {
     62                 pNode->pLeft = pTemp;
     63                 return;
     64             }
     65             else
     66             {
     67                 pNode = pNode->pLeft;
     68             }
     69         }
     70         //相等  出错
     71         else
     72         {
     73             //释放临时节点空间
     74             free(pTemp);
     75             pTemp = NULL;
     76             return;
     77         }
     78     }
     79 }
     80 
     81 BiTree *CreateSBT(int arr[], int len)
     82 {
     83     BiTree *pRoot = NULL;
     84     int i;
     85 
     86     assert(arr!=NULL && len>0);
     87 
     88     for(i=0; i<len; ++i)
     89     {
     90         Add(&pRoot, arr[i]);
     91     }
     92 
     93     return pRoot;
     94 }
     95 
     96 void BiTreeTraversal(BiTree *pRoot)
     97 {
     98     if(NULL == pRoot)
     99     {
    100         return;
    101     }
    102     printf("%d ", pRoot->nValue);
    103     BiTreeTraversal(pRoot->pLeft);
    104     BiTreeTraversal(pRoot->pRight);
    105 }
    106 
    107 int main(void)
    108 {
    109     int arr[] = {1, 7, 3, 4, 5, 6, 7};
    110     int len = sizeof(arr)/sizeof(arr[0]);
    111     BiTree *pRoot = CreateSBT(arr, len);
    112     BiTreeTraversal(pRoot);
    113 
    114     return 0;
    115 }
  • 相关阅读:
    Eclipse上改动Jython代码的Comment颜色
    StaggeredGridView+universal-image-loader载入网路图片实现瀑布流
    HDU 1890 Robotic Sort
    overload和override
    FileStream大文件复制
    [Asp.Net]状态管理(Session、Application、Cache)
    c#简单自定义异常处理日志辅助类
    Socket网络编程(3)--两端通信
    [Asp.Net]状态管理(ViewState、Cookie)
    Socket网络编程(2)--服务端实现
  • 原文地址:https://www.cnblogs.com/chen-cai/p/7859291.html
Copyright © 2020-2023  润新知