由中序和后序重建二叉树

来源:互联网 发布:杨坤空城现场 知乎 编辑:程序博客网 时间:2024/09/21 09:04

求二叉树的深度

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。

输入

输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。

输出

输出二叉树的深度。

示例输入

2dbgeafcdgebfcalnixulinux

示例输出

4

3

慢慢来

#include <stdio.h>#include <iostream>#include <cstring>#include <queue>#include <algorithm>using namespace std;typedef struct node{char data;node *lch,*rch;}btree,*bt;char post[55],ins[55];void build(bt &T,char *ins,char *post,int n) //根据后序和中序重建二叉树{if(n<=0) T=NULL;else{int k=strchr(ins,post[n-1])-ins;T=new btree;T->data=post[n-1];build(T->lch,ins,post,k);build(T->rch,ins+k+1,post+k,n-k-1);}}int deep(bt T){int dep=0;if(!T) return dep;int nl=deep(T->lch);int nr=deep(T->rch);return (nl>nr?nl:nr)+1;}int main(){bt root;int n;cin>>n;getchar();while(n--){cin>>ins>>post;build(root,ins,post,strlen(ins));cout<<deep(root)<<endl;}return 0;}


 

9 0
原创粉丝点击