数据结构实验之二叉树的建立与遍历(万能了,水)

来源:互联网 发布:redis与mysql区别 编辑:程序博客网 时间:2024/05/16 14:39

数据结构实验之二叉树的建立与遍历

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

Problem Description

       已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。

Input

 输入一个长度小于50个字符的字符串。

Output

输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。

Example Input

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

Example Output

cbegdfacgefdba35

Hint

 

Author

 ma6174

水题

#include <bits/stdc++.h>using namespace std;struct Btree{    char data;    struct Btree *lc,*rc;};char st[10010];int ans;int cnt;struct Btree* creat(){    struct Btree *root;    if(st[++ans] == ',')    {        root = NULL;    }    else    {        root = new Btree;        root -> data = st[ans];        root -> lc = creat();        root -> rc = creat();    }    return root;};void LDR(struct Btree * root){    if(root)    {        LDR(root -> lc);        cout<<root ->data;        LDR(root -> rc);        //if(!root -> lc && !root -> rc)          //  cnt++;    }}void LRD(struct Btree *root){    if(root)    {        LRD(root -> lc);        LRD(root -> rc);        cout<<root->data;    }}int depth(struct Btree *root)//递归求树的深度{    if(root == NULL)        return 0;    else    {        int m = depth(root -> lc);        int n = depth(root -> rc);        return (m > n)?(m+1):(n+1);    }}//再加上个层序遍历,基本全了void cengxu(struct Btree * root)//以层序遍历的方式,寻找叶子节点{    queue<Btree*>q;    if(root)        q.push(root);    Btree *qq;    while(!q.empty())    {        qq = q.front();        q.pop();        if(qq -> lc)            q.push(qq->lc);        if(qq -> rc)            q.push(qq->rc);        if(!qq->lc && !qq->rc)//左右子节点都为空,即为叶子节点            cnt++;    }}int main(){    while(cin>>st)    {        ans = -1;        cnt = 0;        struct Btree *root;        root = creat();        LDR(root);        cout<<endl;        LRD(root);        cout<<endl;        cengxu(root);        cout<<cnt<<endl;        int deep = depth(root);        cout<<deep<<endl;    }    return 0;}