baidu_32703855 2015-11-10 05:30
浏览 1382

根据二叉树的先序中序重构二叉树的算法问题

代码编译没有问题,就是输出结果不对
这是我的代码
#include
#include
using namespace std;

class TreeNode
{
private:
int data;
public:
TreeNode* LeftChild;
TreeNode* RightChild;
TreeNode():data(0),LeftChild(NULL),RightChild(NULL)
{

}
TreeNode(int& record):LeftChild(NULL),RightChild(NULL)
{
    data = record;
}
int Data()
{
    return data;
}

};

TreeNode* Rebuild(vector& preorder,int preleft,int preright,vector& inorder,int inleft,int inright)
{
if(preorder.size()!=inorder.size())
{
return NULL;
}
TreeNode* root = new TreeNode(preorder[preleft]);
root->LeftChild = NULL;
root->RightChild = NULL;
int i;

for(i=inleft; i<=inright; i++)
{
    if(inorder[i] == preorder[preleft]);
    break;
}
if(i>inright)
{
    return NULL;
}
int leftcount = i - inleft;
int rightcount = inright-i;
if(leftcount>0)
{
    root->LeftChild = Rebuild(preorder,preleft+1,preleft+leftcount,inorder,inleft,i-1);
}

if(rightcount>0)
{
    root->RightChild = Rebuild(preorder,preright-rightcount+1,preright,inorder,i+1,inright);
}

return root;

}
void PreOrderTraverse(TreeNode* root)
{
if(root!=NULL)
{
cout << root->Data() << " ";
if(root->LeftChild!=NULL)
{
PreOrderTraverse(root->LeftChild);
}
if(root->RightChild!=NULL)
{
PreOrderTraverse(root->RightChild);
}
}
}

void PostOrderTraverse(TreeNode* root)
{

if(root->LeftChild!=NULL)
{
    PostOrderTraverse(root->LeftChild);
}
if(root->RightChild!=NULL)
{
    PostOrderTraverse(root->RightChild);
}
cout << root->Data() << " ";

}
void InOrderTraverse(TreeNode* root)
{
if(root!=NULL)
{
if(root->LeftChild!=NULL)
{
InOrderTraverse(root->LeftChild);
}
cout << root->Data() << " ";
if(root->RightChild!=NULL)
{
InOrderTraverse(root->RightChild);
}
}
}

int main()
{
int n;
cin >> n;
vector preorder(n);

for(int i=0; i<n; i++)
{
    int data;
    cin >> data;
    preorder[i] = data;
}
vector<int> inorder(n);
for(int i=0; i<n; i++)
{
    int data;
    cin >> data;
    inorder[i] = data;
}
TreeNode* root = Rebuild(preorder,0,n-1,inorder,0,n-1);
InOrderTraverse(root);
cout << endl;
PreOrderTraverse(root);
cout << endl;
PostOrderTraverse(root);


return 0;

}
输入样例:
10

1 2 5 10 3 6 13 7 14 15
2 10 5 1 6 13 3 14 7 15

结果就是不对。。实在找不出来了,求大神知道

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
    • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
    • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
    • ¥20 腾讯企业邮箱邮件可以恢复么
    • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
    • ¥15 错误 LNK2001 无法解析的外部符号
    • ¥50 安装pyaudiokits失败
    • ¥15 计组这些题应该咋做呀
    • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
    • ¥15 让node服务器有自动加载文件的功能