• 二叉树


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <malloc.h>
      4 
      5 typedef struct BitTreeNode{
      6     int data;
      7     struct BitTreeNode* Lchild;
      8     struct BitTreeNode* Rchild;
      9 }BTNode;
     10 
     11 BTNode* CreateBitTree(int tdata[], int num);
     12 void PreOrderTraverse(BTNode* tnode, void(*Visit)(BTNode* tnode));
     13 void MidOrderTraverse(BTNode* tnode, void(*Visit)(BTNode* tnode));
     14 void PostOrderTraverse(BTNode* tnode, void(*Visit)(BTNode* tnode));
     15 void PrintData(BTNode* tnode);
     16 
     17 int main(){
     18     BTNode* troot;
     19     int tdata[12] = {123456789101112};
     20     troot = CreateBitTree(tdata, 3);
     21     if(troot == NULL){
     22         printf("Create binary tree failed. ");
     23         exit(0);
     24     }
     25     printf("PreOrderTraverse: ");
     26     PreOrderTraverse(troot, PrintData);
     27 
     28     printf("MidOrderTraverse: ");
     29     MidOrderTraverse(troot, PrintData);
     30 
     31     printf("PostOrderTraverse: ");
     32     PostOrderTraverse(troot, PrintData);
     33     return 0;
     34 }
     35 
     36 /*
     37 *@brief 二叉树的创建
     38 *
     39 *@param [in] tdata    树中结点的个数
     40 *       [in] num      数据个数
     41 *
     42 *@return 创建好的树的根结点指针
     43 */
     44 
     45 BTNode* CreateBitTree(int tdata[], int num){
     46     BTNode* tnode;
     47     if(num != 0){
     48         tnode = (BTNode*)malloc(sizeof(BTNode));
     49         if(tnode == NULL){
     50             return NULL;
     51         }
     52         tnode->data = tdata[num - 1];
     53         tnode->Lchild = CreateBitTree(tdata, num - 1);
     54         tnode->Rchild = CreateBitTree(tdata, num - 1);
     55         return tnode;
     56     }
     57     else{
     58         return NULL;
     59     }
     60 }
     61 
     62 /*
     63 *@brief 二叉树的前序遍历
     64 *
     65 *@param [in] tnode    以该节点为根节点进行遍历
     66 *       [in] Visit    对节点调用的指针函数
     67 *
     68 *@return 空
     69 */
     70 void PreOrderTraverse(BTNode* tnode, void(*Visit)(BTNode* tnode)){
     71     if(tnode != NULL){
     72         Visit(tnode);
     73         PreOrderTraverse(tnode->Lchild, Visit);
     74         PreOrderTraverse(tnode->Rchild, Visit);
     75     }
     76 }
     77 
     78 /*
     79 *@brief 二叉树的中遍历
     80 *
     81 *@param [in] tnode    以该节点为根节点进行遍历
     82 *       [in] Visit    对节点调用的指针函数
     83 *
     84 *@return 空
     85 */
     86 void MidOrderTraverse(BTNode* tnode, void(*Visit)(BTNode* tnode)){
     87     if(tnode != NULL){
     88         MidOrderTraverse(tnode->Lchild, Visit);
     89         Visit(tnode);
     90         MidOrderTraverse(tnode->Rchild, Visit);
     91     }
     92 }
     93 
     94 /*
     95 *@brief 二叉树的后遍历
     96 *
     97 *@param [in] tnode    以该节点为根节点进行遍历
     98 *       [in] Visit    对节点调用的指针函数
     99 *
    100 *@return 空
    101 */
    102 void PostOrderTraverse(BTNode* tnode, void(*Visit)(BTNode* tnode)){
    103     if(tnode != NULL){
    104         PostOrderTraverse(tnode->Lchild, Visit);
    105         PostOrderTraverse(tnode->Rchild, Visit);
    106         Visit(tnode);
    107     }
    108 }
    109 
    110 /*
    111 *@brief 二叉树遍历
    112 *
    113 *@param [in] tnode    对该节点节点调用本函数
    114 *
    115 *@return 空
    116 */
    117 void PrintData(BTNode* tnode){
    118     printf("%d ", tnode->data);
    119 }
  • 相关阅读:
    持续集成
    Centos7配置安装及优化
    vi/vim如何添加或删除多行注释.
    [Ansible实战]-批量配置初始化主机环境.
    VW模板机准备
    一次CPU过载报警处理
    [Ansible实战]-免交互批量管理Zabbix
    [Ansible实战]-ansible初始化mysql数据库
    [Ansible实战]-ansible部署Redis-5.x集群
    远程管理服务(SSH).
  • 原文地址:https://www.cnblogs.com/angle-qqs/p/4041069.html
Copyright © 2020-2023  润新知