zoukankan      html  css  js  c++  java
  • 二叉树的基本操作

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 
      4 #define MAXTSIZE 100;   //二叉树的最大结点数
      5 typedef char TElemType;
      6 
      7 typedef struct BiTNode
      8 {
      9     TElemType data;  //结点数据域
     10     struct BiTNode* lchild;
     11     struct BiTNode* rchild;  //结点的指针域
     12 }BiTNode, * BiTree;
     13 
     14 //前序遍历建立二叉树
     15 void PreOrderCreatBiTree(BiTree* T)
     16 {
     17     char ch;
     18     scanf("%c", &ch);
     19     if (ch == ' ')
     20     {
     21         *T = NULL;
     22     }
     23     else
     24     {
     25         *T = (BiTNode*)malloc(sizeof(BiTNode));
     26         (*T)->data = ch;
     27         PreOrderCreatBiTree(&(*T)->lchild);
     28         PreOrderCreatBiTree(&(*T)->rchild);
     29     }
     30 }
     31 
     32 //前序遍历打印二叉树
     33 void PreOrderTarverse(BiTree T)
     34 {
     35     if (T)
     36     {
     37         printf("%c", T->data);
     38         PreOrderTarverse(T->lchild);
     39         PreOrderTarverse(T->rchild);
     40     }
     41 }
     42 //中序遍历打印二叉树
     43 void InOrderTarverse(BiTree T)
     44 {
     45     if (T)
     46     {
     47         InOrderTarverse(T->lchild);
     48         printf("%c", T->data);
     49         InOrderTarverse(T->rchild);
     50     }
     51 }
     52 //后序遍历打印二叉树
     53 void PostOrderTraverse(BiTree T)
     54 {
     55     if (T)
     56     {
     57         PostOrderTraverse(T->lchild);
     58         PostOrderTraverse(T->rchild);
     59         printf("%c", T->data);
     60     }
     61 }
     62 //复制一颗二叉树
     63 void Copy(BiTree T, BiTree *NewT)
     64 {
     65     if (T == NULL)
     66     {
     67         *NewT = NULL;
     68         return;
     69     }
     70     else
     71     {
     72         *NewT = (BiTNode *)malloc(sizeof(BiTNode));
     73         (*NewT)->data = T->data;
     74         Copy(T->lchild, &(*NewT)->lchild);
     75 
     76         Copy(T->rchild, &(*NewT)->rchild);
     77     }
     78 }
     79 //求深度
     80 int Depth(BiTree T)
     81 {
     82     int m = 0;
     83     int n = 0;
     84 
     85     if (T == NULL)
     86     return 0;
     87     else
     88     {
     89         m = Depth(T->lchild);
     90         n = Depth(T->rchild);
     91     }
     92     if (m > n)
     93         return (m + 1);
     94     else
     95         return (n + 1);
     96 }
     97 //统计结点个数
     98 int NodeCount(BiTree T)
     99 {
    100     if (T == NULL)
    101     {
    102         return 0;
    103     }
    104     else
    105     {
    106         return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
    107     }
    108 }
    109 
    110 int main(void)
    111 {
    112     BiTree T = NULL;
    113     BiTree NewT = NULL;
    114     int depth;
    115     int NodeNum;
    116     //BiTree pNewT;
    117 
    118     printf("前序遍历创建二叉树,' '表示空:
    ");
    119     PreOrderCreatBiTree(&T);
    120     printf("下面前序遍历打印二叉树:
    ");
    121     PreOrderTarverse(T);
    122     printf("
    ");
    123     printf("下面中序遍历打印二叉树:
    ");
    124     InOrderTarverse(T);
    125     printf("
    ");
    126     printf("下面后序遍历打印二叉树:
    ");
    127     PostOrderTraverse(T);
    128     printf("
    ");
    129     printf("开始复制二叉数并前序遍历打印:
    ");
    130     Copy(T, &NewT);
    131     PreOrderTarverse(NewT);
    132     printf("
    下面计算二叉树的深度:
    ");
    133     depth = Depth(T);
    134     printf("二叉树的深度为:%d", depth);
    135     printf("
    下面统计二叉树中结点的个数:
    ");
    136     NodeNum = NodeCount(T);
    137     printf("结点总结点个数为:%d", NodeNum);
    138     return 0;
    139 }
  • 相关阅读:
    公司到底是怎么看我们的……[转]
    C# String.Format 的使用[转]
    Oracle9I 在安装时出现[登台区出现问题,请确保指定有效的“源”和“目标”!]
    街机游戏下载
    C#操作Excel时直接引用Com和InteropExcel的差异
    我所理解的接口和抽象类[转]
    c# winFrom 使窗体显示SplitContainer或Panel中[转]
    SQL Server 2005之PIVOT/UNPIVOT行列转换(转)
    Solaris大半年使用感触
    solaris上的pkg管理
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12600348.html
Copyright © 2011-2022 走看看