给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <queue> using namespace std; typedef struct TNode { char data; TNode *Lchild; TNode *Rchild; } TNode; TNode* restore(char* pre,char* in, int length) { //先还原二叉树 if(length == 0) { return NULL ; } TNode* node=new TNode; node->data=*pre; int r=0; for( ; r< length; r++) { if(in[r] == *pre) break; } node->Lchild = restore(pre+1,in,r); node->Rchild= restore(pre+r+1,in+r+1,length-(r+1)); //cout<<node->data; return node; }
int Height(TNode *T){//求出树的高度
int m,n,He; if(!T) He=0; else { m=Height(T->Lchild); n=Height(T->Rchild); He=1+(m>n?m:n); } return He; } int main() { int n,H; while(cin>>n) { char pre[60],in[60]; cin>>pre>>in; TNode *Ti; Ti=restore(pre,in,n); H=Height(Ti); cout<<H<<endl; } }