#include <iostream>
#include <string>
#include <queue>
using namespace std;
struct Node{
char val;
Node * l;
Node * r;
};
int indexOf(const char * str,char val,int size)
{
int i=0;
for(i=0;i<size;i++)
{
if(str[i]==val)
{
return i;
}
}
return -1;
}
bool isHaveLeft(const char * pre,const char * mid,int size)
{
if(indexOf(mid,pre[0],size)==0) return false;
return true;
}
bool isHaveRight(const char * pre,const char * mid,int size)
{
if(indexOf(mid,pre[0],size)==size-1) return false;
return true;
}
Node * reCreateThree(const char * pre,const char * mid,int size)
{
if (size==0) return NULL;
Node * root = new Node();
root->val=pre[0];
int RootIndex=indexOf(mid,pre[0],size);
if(isHaveLeft(pre,mid,size))
{
root->l=reCreateThree(pre+1,mid,RootIndex);
}
else
{
root->l=NULL;
}
if(isHaveRight(pre,mid,size))
{
root->r=reCreateThree(pre+RootIndex+1,mid+RootIndex+1,size-RootIndex-1);
}else
{
root->r=NULL;
}
return root;
}
void LRD(Node * root)
{
if(root==NULL) return;
if(root->l!=NULL)
{
LRD(root->l);
}
if(root->r!=NULL)
{
LRD(root->r);
}
cout<< root->val;
return;
}
int main()
{
string q;
string h;
cin>>q;
cin>>h;
Node * root =reCreateThree(q.c_str(),h.c_str(),q.size());
LRD(root);
while(1);
return 0;
}
通过前序和中序重建二叉树
最新推荐文章于 2024-10-04 19:38:20 发布
本文介绍了一种根据先序遍历和中序遍历序列重构二叉树的方法,并实现了左子树-右子树-根节点(LRD)的遍历方式。通过C++代码实现,该程序读取输入的先序和中序遍历字符串,重建二叉树结构并输出LRD遍历结果。
摘要由CSDN通过智能技术生成