C++ 从预阶和最小阶横向序列重建二叉树,重建过程中出错

C++ 从预阶和最小阶横向序列重建二叉树,重建过程中出错,c++,data-structures,binary-tree,C++,Data Structures,Binary Tree,输入是preOrder:BCAD和middorder:CBAD,但递归构建函数中存在错误。如果我的猜测是正确的,那么while体由于某些错误而无法跳出,但我不知道错误到底是什么 #include <iostream> using namespace std; struct Node { char data; Node* left; Node* right; Node(char d=0, Node* l=NULL, Node* r=NULL):d

输入是preOrder:BCAD和middorder:CBAD,但递归构建函数中存在错误。如果我的猜测是正确的,那么while体由于某些错误而无法跳出,但我不知道错误到底是什么

#include <iostream>

using namespace std;

struct Node
{
    char data;

    Node* left;
    Node* right;

    Node(char d=0, Node* l=NULL, Node* r=NULL):data(d),left(l),right(r) {}
};

void recoverTree(char* pre, char* mid, Node* root);
void postTranverse(Node* root);
void clean(Node* root);

int main()
{
    char preArr[27], midArr[27];
    while(cin>>preArr>>midArr)
    {
        Node* root;
        recoverTree(preArr,midArr,root);
        postTranverse(root);

        clean(root);
    }

    return 0;
}

void recoverTree(char* pre, char* mid, Node* root)//build binary tree from given sequence
{
    char* midTemp=mid;
    if(*mid==0)
    {
        root=NULL;
        return;
    }

    while(true)     //loop can't jump out
    {
        if(*pre==*midTemp)
        {
            root=new Node(*pre);
            *midTemp=0;     //how to mark to stop the recursion, wrong?
            break;
        }
        ++midTemp;
    }

    recoverTree(pre+1,mid,root->left);
    recoverTree(pre+1,midTemp+1,root->right);
}

void postTranverse(Node* root)// post tranverse the tree
{
    if(root==NULL)
        return;
    //if(root->left!=NULL)
        postTranverse(root->left);
    //if(root->right!=NULL)
        postTranverse(root->right);
    cout<<root->data;
}

void clean(Node* root)  //release memory in heap
{
    if(root->left!=NULL)
            clean(root->left);
    if(root->right!=NULL)
            clean(root->right);

    delete root;
}
#包括
使用名称空间std;
结构体类型
{
字符数据;
节点*左;
节点*右;
节点(chard=0,Node*l=NULL,Node*r=NULL):数据(d),左(l),右(r){
};
void恢复树(char*pre,char*mid,Node*root);
无效后向(节点*根);
void clean(节点*根节点);
int main()
{
char-preArr[27],midArr[27];
而(cin>>前抑制>>中抑制)
{
节点*根;
恢复树(前、中、根);
后经文(词根);
清洁(根);
}
返回0;
}
void recoverTree(char*pre,char*mid,Node*root)//根据给定序列构建二叉树
{
字符*中间温度=中间温度;
如果(*mid==0)
{
root=NULL;
返回;
}
while(true)//循环无法跳出
{
如果(*pre==*midTemp)
{
根=新节点(*pre);
*midTemp=0;//如何标记以停止递归,错误?
打破
}
++中温;
}
恢复树(前+1、中、根->左);
恢复树(pre+1,midTemp+1,root->right);
}
void postTranverse(Node*root)//对树进行postTranverse
{
if(root==NULL)
返回;
//如果(根->左!=NULL)
后向(根->左);
//如果(根->右!=NULL)
postTranverse(根->右);
coutleft!=NULL)
清洁(根->左);
如果(根->右!=NULL)
清洁(根->右);
删除根;
}

你说的“有错误”是什么意思?生成错误?运行时错误或崩溃?意外的结果?请澄清。然后你应该在调试器中运行以捕获“崩溃”,并查看它在代码中发生的位置,并检查变量,看看你是否能自己解决它。如果没有,那么至少请编辑您的问题,告诉我们崩溃发生在哪里,以及所有相关变量的值是什么。您说的“有错误”是什么意思?生成错误?运行时错误或崩溃?意外的结果?请澄清。然后你应该在调试器中运行以捕获“崩溃”,并查看它在代码中发生的位置,并检查变量,看看你是否能自己解决它。如果没有,那么至少请编辑您的问题,告诉我们崩溃发生在哪里,以及所有相关变量的值是什么。