• 二叉树


      1 /*
      2 树 二叉树
      3 LJK 2018-07-05
      4 */
      5 #include<stdio.h>
      6 #include<stdlib.h>
      7 #include<math.h>
      8 
      9 #define OK 1
     10 #define ERROR 0
     11 #define TRUE 1
     12 #define FALSE 0
     13 
     14 typedef int Status;
     15 typedef char TElemType;
     16 
     17 // 节点结构
     18 typedef struct biTNode
     19 {
     20     TElemType data;                        // 节点数据
     21     struct biTNode *lchild, *rchild;    // 左右孩子指针
     22 }BiTNode;
     23 
     24 int index = 0;
     25 char String[] = "AB#D##C##";
     26 
     27 // 构造空二叉树
     28 Status InitBiTree(BiTNode **T)
     29 {
     30     *T = NULL;
     31     return OK;
     32 }
     33 
     34 // 按前序输入二叉树中节点的值(一个字符),#表示空树,构造二叉链表表示二叉树
     35 void CreateBiTree(BiTNode **T)
     36 {
     37     TElemType ch;
     38     ch = String[index++];
     39 
     40     if (ch == '#') *T = NULL;
     41     else
     42     {
     43         *T = (BiTNode *)malloc(sizeof(BiTNode));
     44         if (!(*T)) exit(OVERFLOW);
     45         (*T)->data = ch;
     46         CreateBiTree(&(*T)->lchild);
     47         CreateBiTree(&(*T)->rchild);
     48     }
     49 }
     50 
     51 // 若T为空二叉树,则返回TRUE,否则返回FALSE
     52 Status BiTreeEmpty(BiTNode *T)
     53 {
     54     if (T) return false;
     55     else return TRUE;
     56 }
     57 
     58 // 返回树的深度
     59 int BiTreeDepth(BiTNode *T)
     60 {
     61     int i, j;
     62     if (!T) return 0;
     63     if (T->lchild) i = BiTreeDepth(T->lchild);
     64     else i = 0;
     65     if (T->rchild) j = BiTreeDepth(T->rchild);
     66     else j = 0;
     67     return i > j ? i + 1 : j + 1;
     68 }
     69 
     70 // 若存在,返回T的根
     71 TElemType Root(BiTNode *T)
     72 {
     73     if (BiTreeEmpty(T)) return ' ';
     74     else return T->data;
     75 }
     76 
     77 // 前序递归遍历树
     78 void PreOrderTraverse(BiTNode *T)
     79 {
     80     if (!T) return;
     81     printf("%c ", T->data);
     82     PreOrderTraverse(T->lchild);
     83     PreOrderTraverse(T->rchild);
     84 }
     85 
     86 // 中序递归遍历树
     87 void InOrderTraverse(BiTNode *T)
     88 {
     89     if (!T) return;
     90     InOrderTraverse(T->lchild);
     91     printf("%c ", T->data);
     92     InOrderTraverse(T->rchild);
     93 }
     94 
     95 // 后序递归遍历树
     96 void PostOrderTraverse(BiTNode *T)
     97 {
     98     if (!T) return;
     99     PostOrderTraverse(T->lchild);
    100     PostOrderTraverse(T->rchild);
    101     printf("%c ", T->data);
    102 }
    103 
    104 // 清空二叉树
    105 void ClearBiTree(BiTNode **T)
    106 {
    107     if (*T)
    108     {
    109         if ((*T)->lchild)
    110             ClearBiTree(&(*T)->lchild);
    111         if ((*T)->rchild)
    112             ClearBiTree(&(*T)->rchild);
    113         free(*T);
    114         *T = NULL;
    115     }
    116 }
    117 
    118 int main()
    119 {
    120     //        A
    121     //       / 
    122     //      B   C
    123     //       
    124     //        D
    125     BiTNode *t; // 头指针
    126     TElemType e1;
    127     int i;
    128 
    129     InitBiTree(&t);
    130     printf("初始化后,树空否?%d (1:空 0:非空)
    
    ", BiTreeEmpty(t));
    131 
    132     CreateBiTree(&t);
    133     printf("构造空二叉树后,树空否? %d (1:空 0:非空)
    ", BiTreeEmpty(t));
    134     printf("构造空二叉树后,树的深度 = %d
    
    ", BiTreeDepth(t));
    135 
    136     e1 = Root(t);
    137     printf("RooTree = %c
    
    ", e1);
    138 
    139     printf("前序遍历二叉树: ");
    140     PreOrderTraverse(t);
    141     printf("
    
    ");
    142 
    143     printf("中序遍历二叉树: ");
    144     InOrderTraverse(t);
    145     printf("
    
    ");
    146 
    147     printf("后序遍历二叉树: ");
    148     PostOrderTraverse(t);
    149     printf("
    
    ");
    150 
    151     ClearBiTree(&t);
    152     printf("After ClearTree is Empty? %d (1:Yes 0:NO) TreeDepth = %d
    ", BiTreeEmpty(t), BiTreeDepth(t));
    153     i = Root(t);
    154     if (i == ' ') printf("Tree Empty No Root.
    ");
    155     getchar();
    156     return 0;
    157 }
  • 相关阅读:
    @loj
    @loj
    @划水记@ THUWC2020 (?)
    @codeforces
    @loj
    Spark设计理念与基本架构
    Spark源码解析
    Spark Submitting Applications浅析
    Spark RDD基本概念与基本用法
    Storm基本原理概念及基本使用
  • 原文地址:https://www.cnblogs.com/IamJiangXiaoKun/p/9453308.html
Copyright © 2020-2023  润新知