代码编译没有问题,就是输出结果不对
这是我的代码
#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
结果就是不对。。实在找不出来了,求大神知道