• 二叉树先序 中序 后序遍历


    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    int index=1;
    typedef char String[24];
    String str;
    
    /*=============用于构造二叉树(存储的数据)===============*/
    void StrAssign(String str,char *chars){
        int i;
        for(i=1;i<=strlen(chars);i++)
            str[i]=*(chars+i-1);    
    } 
    
    /*==============创建二叉树结构============================*/
    typedef struct BiTNode{
        char data;
        struct BiTNode *lchild,*rchild; 
    }BiTNode,*BiTree; 
    
    /*================按照前序输入二叉树中节点的值==================*/ 
    void CreateBiTree(BiTree *T){
        char ch;
        ch=str[index++]; 
        if(ch=='#')
            *T=NULL;
        else{
            *T=(BiTree)malloc(sizeof(BiTNode));
            (*T)->data=ch;
            CreateBiTree(&(*T)->lchild);
            CreateBiTree(&(*T)->rchild);
        }
    } 
    /*=============返回T的深度===========*/
    int BiTreeDepth(BiTree T){
        int i,j;
        if(!T)
            return 0;
        if(T->lchild)
            i=BiTreeDepth(T->lchild);
        else 
            i=0;
        if(T->rchild)
            j=BiTreeDepth(T->rchild);
        else
            j=0;
        return i>j?i+1:j+1;
    } 
    /*==============先序遍历二叉树========*/
    void PreOederTraverse(BiTree T){
        if(T==NULL)
            return;
        printf("%c",T->data);
        PreOederTraverse(T->lchild);
        PreOederTraverse(T->rchild);
    } 
    /*=============中序遍历二叉树==============*/
    void InOrderTraverse(BiTree T){
        if(T==NULL)
            return;
        InOrderTraverse(T->lchild);
        printf("%c",T->data);
        InOrderTraverse(T->rchild);
    }
    /*=============后序遍历二叉树==============*/
    void PostOrderTraverse(BiTree T){
        if(T==NULL)
            return;
        PostOrderTraverse(T->lchild);
        PostOrderTraverse(T->rchild);
        printf("%c",T->data);
    }
    int main(){
        BiTree T;
        StrAssign(str,"ABDH#K###E##CFI###G#J##"); 
        CreateBiTree(&T);
        printf("先序遍历
    ");
        PreOederTraverse(T);
        printf("
    中序遍历
    ");
        InOrderTraverse(T);
        printf("
    后序遍历
    ");
        PostOrderTraverse(T);
        printf("
    二叉树深度%d
    ",BiTreeDepth(T));
        return 0;
    }
    View Code

  • 相关阅读:
    libev & libevent简介
    MyEclipse10+Flash Builder4+BlazeDS+Tomcat7配置J2EE Web项目报错(一)
    增加表空间大小的四种方法
    JavaScript获取某年某月的最后一天
    Not in 改写左连接不需要关注连接列是否重复数据
    自连接
    左链接,右连接
    In,内链接和空值
    HighCharts基本折线图
    NetBeans运行项目报错
  • 原文地址:https://www.cnblogs.com/sky-z/p/4644476.html
Copyright © 2020-2023  润新知