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("
    ");
    } 
     
  • 相关阅读:
    存储过程!
    声卡: 不同的声音,声卡进阶应用技巧集(zz)
    VMware虚拟机的移植性……
    终于挤进前五十了,呵呵
    水源九周年庆:)
    Windows Malicious Software Removal Tool
    听教授谈论文
    VMware虚拟机文件整理和压缩
    弄了一整天的VMWare
    倒霉!倒霉!
  • 原文地址:https://www.cnblogs.com/qian-yi/p/12732172.html
Copyright © 2011-2022 走看看