• 二叉树模板


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <malloc.h>
      4 typedef int  ElemType; //数据类型
      5 
      6 //定义二叉树结构,与单链表相似,多了一个右孩子结点
      7 typedef struct BiTNode
      8 {
      9     ElemType  data; //数据域
     10     struct BiTNode
     11         *lChild, *rChlid; //左右子树域
     12 } BiTNode, *BiTree;
     13 
     14 //先序创建二叉树
     15 int CreateBiTree(BiTree *T)
     16 {
     17     ElemType ch;
     18     ElemType temp;
     19     scanf("%d", &ch);
     20     temp = getchar();
     21     if (ch == -1)
     22         *T = NULL;
     23     else
     24     {
     25         *T = (BiTree)malloc(sizeof(BiTNode));
     26         if (!(*T))
     27             exit(-1);
     28         (*T)->data = ch;
     29         printf("输入%d的左子节点:", ch);
     30         CreateBiTree(&(*T)->lChild);
     31         printf("输入%d的右子节点:", ch);
     32         CreateBiTree(&(*T)->rChlid);
     33     }
     34     return 1;
     35 }
     36 
     37 //先序遍历二叉树
     38 void TraverseBiTree(BiTree T)
     39 {
     40     if (T == NULL)
     41         return ;
     42     printf("%d ", T->data);
     43     TraverseBiTree(T->lChild);
     44     TraverseBiTree(T->rChlid);
     45 
     46 
     47 }
     48 
     49 //中序遍历二叉树
     50 void InOrderBiTree(BiTree T)
     51 {
     52     if (T == NULL)
     53         return ;
     54     InOrderBiTree(T->lChild);
     55     printf("%d ", T->data);
     56     InOrderBiTree(T->rChlid);
     57 
     58 
     59 }
     60 
     61 
     62 //后序遍历二叉树
     63 void PostOrderBiTree(BiTree T)
     64 {
     65     if (T == NULL)
     66         return ;
     67     PostOrderBiTree(T->lChild);
     68     PostOrderBiTree(T->rChlid);
     69     printf("%d ", T->data);
     70 }
     71 
     72 //二叉树的深度
     73 
     74 int TreeDeep(BiTree T)
     75 {
     76     int deep = 0;
     77     if(T)
     78     {
     79         int leftdeep = TreeDeep(T->lChild);
     80         int rightdeep = TreeDeep(T->rChlid);
     81         deep = leftdeep>=rightdeep?leftdeep+1:rightdeep+1;
     82     }
     83     return deep;
     84 }
     85 
     86 //求二叉树叶子结点个数
     87 
     88 int Leafcount(BiTree T,int &num)
     89 {
     90     if(T)
     91     {
     92         if(T->lChild ==NULL &&T->rChlid==NULL)
     93 
     94             num++;
     95         Leafcount(T->lChild,num);
     96         Leafcount(T->rChlid,num);
     97 
     98 
     99     }
    100     return num;
    101 }
    102 //主函数
    103 int main(void)
    104 {
    105     BiTree T;
    106     BiTree *p = (BiTree*)malloc(sizeof(BiTree));
    107     int deepth,num=0 ;
    108     printf("请输入第一个结点的值,-1表示没有叶结点:
    ");
    109     CreateBiTree(&T);
    110     printf("先序遍历二叉树:
    ");
    111     TraverseBiTree(T);
    112     printf("
    ");
    113     printf("中序遍历二叉树:
    ");
    114     InOrderBiTree(T);
    115     printf("
    ");
    116     printf("后序遍历二叉树:
    ");
    117     PostOrderBiTree(T);
    118     printf("
    ");
    119     deepth=TreeDeep(T);
    120     printf("树的深度为:%d",deepth);
    121     printf("
    ");
    122     Leafcount(T,num);
    123     printf("树的叶子结点个数为:%d",num);
    124     printf("
    ");
    125     return 0;
    126 }
  • 相关阅读:
    Java基础多线程之后台守护线程,setDaemon(true)
    Java基础多线程间通讯之多生产者、多消费者模式示例:
    Java基础多线程通讯之生产者消费者模式示例:
    Java基础多线程之单例模式之懒汉式:
    Java基础多线程间通讯同步操作示例一(未优化):
    Java基础多线程之线程中止示例:
    Java基础多线程之join抢夺CPU执行权直到该线程结束。
    Java基础多线程之单例模式之饿汉式:
    Java基础多线程间通讯示例操作(已优化)二:
    Java基础多线程之实际开发中常见写法:
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/9163078.html
Copyright © 2020-2023  润新知