zoukankan      html  css  js  c++  java
  • 数据结构实验之二叉树的建立与遍历 分类: 树 2015-06-21 11:02 8人阅读 评论(0) 收藏

    数据结构实验之二叉树的建立与遍历
    Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
    题目描述
    已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。

    输入
    输入一个长度小于50个字符的字符串。
    输出
    输出共有4行:
    第1行输出中序遍历序列;
    第2行输出后序遍历序列;
    第3行输出叶子节点个数;
    第4行输出二叉树深度。
    示例输入

    abc,,de,g,,f,,,

    示例输出

    cbegdfa
    cgefdba
    3
    5

    /*
    建立二叉树,进行层次遍历和前,中,后序的遍历
    */
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <cstdlib>
    #include <time.h>
    #include <cctype>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <climits>
    #include <string>
    #include <iostream>
    #include <algorithm>
    #define RR freopen("input.txt","r",stdin)
    #define WW freopen("output.txt","w",stdout)
    #define INF 0x3f3f3f3f
    
    using namespace std;
    
    const int Max=1000001;
    
    char str[110];
    
    int top;
    
    int Sum;
    
    int Deep;
    
    struct Tree
    {
        char c;
        Tree *L;
        Tree *R;
    };
    
    struct Tree* CreatTree()
    {
        Tree *p;
        p=new Tree;
        p->L=NULL;
        p->R=NULL;
        return p;
    }
    
    struct Tree* BuildTree(Tree *root)//建树
    {
        if(!str[top]||str[top]==',')
        {
            return NULL;
        }
        root=CreatTree();
        root->c=str[top];
        top++;
        root->L=BuildTree(root->L);
        top++;
        root->R=BuildTree(root->R);
        return root;
    }
    void InOrder(Tree* root,int ans)
    {
        if(!root)
        {
            if(ans>Deep)
            {
                Deep=ans;//计算树的深度
            }
            return ;
        }
        if(!root->L&&!root->R)
        {
            Sum++;//计算叶子节点
        }
        InOrder(root->L,ans+1);
        printf("%c",root->c);
        InOrder(root->R,ans+1);
    }
    
    void PostOrder(Tree* root)
    {
        if(!root)
        {
            return ;
        }
        PostOrder(root->L);
        PostOrder(root->R);
        printf("%c",root->c);
    }
    int main()
    {
        Tree * Root;
        scanf("%s",str);
        top=0;
        Sum=0;
        Deep=0;
        Root=BuildTree(Root);
        InOrder(Root,0);
        cout<<endl;
        PostOrder(Root);
        cout<<endl;
        cout<<Sum<<endl;
        cout<<Deep<<endl;
        return 0;
    
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    MongoDB时间处理问题
    TextArea里Placeholder换行问题
    C# 文件与二进制流间的转换
    WPF图标旋转的动画
    ABP之本地化/多语言支持
    ABP之应用服务层Application
    ABP之创建实体
    关于Mapper not initialized的错误
    Request verb is GET. It should be Post(ABP使用api访问错误)
    在ABP模板工程中使用MySQL
  • 原文地址:https://www.cnblogs.com/juechen/p/4722001.html
Copyright © 2011-2022 走看看