数据结构实验之二叉树的建立与遍历
来源:互联网 发布:金山软件校招 编辑:程序博客网 时间:2024/05/16 16:21
数据结构实验之二叉树的建立与遍历
Time Limit: 1000MS Memory limit: 65536K
题目描述
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。
输入
输入一个长度小于50个字符的字符串。
输出
输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
示例输入
abc,,de,g,,f,,,
示例输出
cbegdfa
cgefdba
3
5
提示
<pre name="code" class="cpp">#include <stdio.h>#include <stdlib.h>char ch[55];int i,count;int level,dval;int depthval;typedef char element;typedef struct BiTnNode{ element data; struct BiTnNode *rchild,*lchild;} BiTnNode,*BiTree; ///定义结构体类型BiTNode和指针类型BiTree;//后边定义BiTnNode *T时,可以用BiTree T;void CreateTree(BiTree &T)///建树时必须加&,{ char e=ch[i++]; if(e==',') T=NULL; else { if(!(T=new BiTnNode))///为T申请空间;如果为空,运算无效 exit(-1); T->data=e; CreateTree(T->lchild); CreateTree(T->rchild); }}void inOrder(BiTree T)///中序遍历{ if(T==NULL) return ; inOrder(T->lchild); printf("%c",T->data); inOrder(T->rchild);}void postOrder(BiTree T)///后序遍历{ if(T==NULL) return ; postOrder(T->lchild); postOrder(T->rchild); printf("%c",T->data);}void Treecount1(BiTree T)///叶子查询方法一{ if(T) { if(T->lchild==NULL&&T->rchild==NULL) count++; Treecount1(T->lchild); Treecount1(T->rchild); }}int Treecount2(BiTree T)///叶子查询方法二{ if(!T) return 0; if(T->lchild==NULL&&T->rchild==NULL) return 1; else { int m=Treecount2(T->lchild); int n=Treecount2(T->rchild); return m+n; }}void depthTree1(BiTree T,int level,int &dval)///树的深度方法一{ if(T) { if(level>dval) dval = level; depthTree1( T->lchild, level+1, dval ); depthTree1( T->rchild, level+1, dval ); }}int depthTree2(BiTree T)///树的深度方法二{ if (!T) depthval = 0; else { int depthLeft = depthTree2(T->lchild); int depthRight = depthTree2(T->rchild); depthval = 1+(depthLeft > depthRight ? depthLeft : depthRight); } return depthval;}int main(){ BiTree T; gets(ch); i=0; CreateTree(T); inOrder(T); printf("\n"); postOrder(T); printf("\n"); ///******** count=0; Treecount1(T); printf("%d\n",count); ///********* int x=Treecount2(T); printf("%d\n",x); ///********* level=1; dval=0; depthTree1(T,level,dval); printf("%d\n",dval); ///********* depthTree2(T); printf("%d\n",depthval); return 0;}
0 0
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 2136 数据结构实验之二叉树的建立与遍历
- 2136 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- sdutoj2136 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历 SDUT
- 博弈,找规律_______A Funny Game(poj 2484)
- poj 3667 Hotel(线段树区间更新合并)
- 如何恢复Hadoop中被删除的文件
- Android Intent详解
- Dubbo令牌验证
- 数据结构实验之二叉树的建立与遍历
- 论文笔记:Precomputed Real-Time Texture Synthesis with Markovian Generative Adversarial Networks
- 网络爬虫爬取全国省市区(动态ip代理的获取,实现对ip限制的突破)
- hdu 5115 Dire Wolf 区间dp 大水题
- linux中txt文件的中文乱码问题
- android developer tiny share-20160808
- dlopen的用法
- KMP算法
- Effective C++ Item10-令operator = 返回一个reference to *this