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("
    ");
    } 
     
  • 相关阅读:
    [转]数值分析——多项式插值之Lagrange插值
    [转]上拉电阻&下拉电阻&高阻态
    [转]Verilog学习笔记基本语法篇(十三)...............Gate门
    Spring MVC中的Controller是Serlvet吗?
    preparestatement和statement的区别&&简单的SQL注入
    jquery局部变量和全局变量的错误
    js 中{},[]中括号,大括号使用详解
    Java数据库学习之SQL语句动态拼接
    jquery中关键字写错导致的错误——dataType写成dateType(data写成date)
    一次隐蔽的while死循环
  • 原文地址:https://www.cnblogs.com/qian-yi/p/12732172.html
Copyright © 2011-2022 走看看