zoukankan      html  css  js  c++  java
  • 二叉树的建立和遍历(c语言描述)

      二叉树是比较特殊的树,二叉树的存储方式有顺序存储和链式存储,我们基本上都是用的链式存储,

    1.声明结构体

    typedef char ElemType;
    typedef struct BiTNode
    {
        ElemType data; 
        struct BiTNode *lchild,*rchild; //左右孩子树
    }BiTNode,*BiTree;

    2.创建二叉树

    采用递归的方式:这里采用的是按照先序序列建立二叉树,

    void createBiTree(BiTree *T)
    {
        char s;
        scanf("%c",&s);
        
        if(s=='$')
        {
            *T=NULL;
        }
        else
        {
            *T=(BiTNode*)malloc(sizeof(BiTNode)); //生成结点
            if(!(*T))
            {
                printf("申请空间失败
    ");
            }
            (*T)->data=s;
            createBiTree(&(*T)->lchild);
            createBiTree(&(*T)->rchild);
        }
    }

    所有的代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    
    typedef char ElemType;
    typedef struct BiTNode
    {
        ElemType data; 
        struct BiTNode *lchild,*rchild; //左右孩子树
    }BiTNode,*BiTree;
    
    //二叉树的建立  按照先序遍历建立 
    void createBiTree(BiTree *T)
    {
        char s;
        scanf("%c",&s);
        
        if(s=='$')
        {
            *T=NULL;
        }
        else
        {
            *T=(BiTNode*)malloc(sizeof(BiTNode)); //生成结点
            if(!(*T))
            {
                printf("申请空间失败
    ");
            }
            (*T)->data=s;
            createBiTree(&(*T)->lchild);
            createBiTree(&(*T)->rchild);
        }
    }
    
    //二叉树先序遍历
    void preorderVisit(BiTree T) //这里不要使用BiTNode *T , 不要直接对树进行操作 
    {
        if(T)  //先要进行判断,只有结点不为空才会遍历 
        {
            printf("%c ",T->data);
            preorderVisit(T->lchild);
            preorderVisit(T->rchild);
        }
    }
    
    //二叉树中序遍历
    void middleVisit(BiTree T)   //这里不要使用BiTNode *T , 不要直接对树进行操作 
    {
        if(T)   //先要进行判断,只有结点不为空才会遍历 
        {
            middleVisit(T->lchild);
            printf("%c ",T->data);
            middleVisit(T->rchild);
        }
    
    }
    
    //二叉树后序遍历
    void postVisit(BiTree T)   //这里不要使用BiTNode *T , 不要直接对树进行操作 
    {
        if(T)   //先要进行判断,只有结点不为空才会遍历 
        {
            postVisit(T->lchild);
            postVisit(T->rchild);
            printf("%c ",T->data);
        }
    }
    
    int main()
    {
        printf("请输入二叉树,按照先序遍历,无字树用$号表示
    "); 
        
        BiTree T;
        createBiTree(&T);
        
        printf("先序遍历结果如下:
    ");
        preorderVisit(T);
        printf("
    ");
        
        printf("中序遍历结果如下:
    ");
        middleVisit(T);
        printf("
    ");
        
        printf("后序遍历结果如下:
    ");
        postVisit(T);
        printf("
    ");
    } 
     
  • 相关阅读:
    MYsql增删改查
    粘包问题
    模拟ssh远程执行命令
    Socket抽象层
    基于TCP协议的socket套接字编程
    TCP协议的三次握手和四次挥手
    大话OSI七层协议
    网络架构及其演变过程
    互联网和互联网的组成
    Windows安装MySQL
  • 原文地址:https://www.cnblogs.com/qian-yi/p/12732172.html
Copyright © 2011-2022 走看看