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;
    
    }
    

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

  • 相关阅读:
    牛客练习赛51 D题
    Educational Codeforces Round 72 (Rated for Div. 2) C题
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises) C题
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises) A题
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises) A题
    Educational Codeforces Round 72 (Rated for Div. 2) B题
    Educational Codeforces Round 72 (Rated for Div. 2) A题
    《DSP using MATLAB》Problem 7.2
    《DSP using MATLAB》Problem 7.1
    《DSP using MATLAB》Problem 6.24
  • 原文地址:https://www.cnblogs.com/juechen/p/4722001.html
Copyright © 2011-2022 走看看