求二叉树的深度
来源:互联网 发布:手机淘宝下载安装2017免费下载 编辑:程序博客网 时间:2024/06/07 08:15
求二叉树的深度
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。
Input
输入数据有多组,输入T组数据。每组数据包括两个长度小于<font face="\"Times" new="" roman,="" serif\"="" style="box-sizing: border-box;">50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。
Output
输出二叉树的深度。
Example Input
2dbgeafcdgebfcalnixulinux
Example Output
43
Hint
Author
求二叉树深度,高度的三种算法:http://blog.csdn.net/qq_36525906/article/details/54973573
#include <bits/stdc++.h>using namespace std;struct Btree{ char data; struct Btree *lc,*rc;};char mid[10010];//中序序列char las[10010];//后序序列struct Btree* creat(int len, char *mid, char *las)//二叉树的重建{ struct Btree *root; int i ; if(len == 0) { return NULL; } root = new Btree; root -> data = las[len -1];//找到根节点(后序遍历的最后一位) for(i = 0; i < len; i++)//在中序序列中找到根节点的位置 { if(mid[i] == las[len-1]) break; } root -> lc = creat(i, mid, las);//递归遍历(左子树的长度,左子树在mid中开始位置的地址,左子树在las中开始位置的地址) root -> rc = creat(len-i-1, mid+i+1, las+i);//(右子树的长度,右子树在mid中开始位置的地址,右子树在las中开始位置的地址) return root;};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); }}int main(){ int t; while(cin>>t) { while(t--) { cin>>mid>>las; int len = strlen(mid); struct Btree *root; root = creat(len,mid,las); int deep = depth(root); cout<<deep<<endl; } } return 0;}
阅读全文
0 0
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- 求二叉树的深度
- pandas基础
- 钱币兑换问题
- HTTP长连接和短链接
- C#和NewSQL更配 —— CockroachDB入门(可能是C#下的全网首发)
- Immutable 详解及 React 中实践
- 求二叉树的深度
- 李文星事件谁该反思?
- HDU1213-How Many Tables (并查集)
- SELinux状态
- Activity设置singleInstance后不能启用startActivityForResult()进行数据回调
- 个人模板 拓扑排序
- sigmoid函数的实现
- Windows中的SID详解
- IO流——读取键盘录入