已知二叉樹的中序遍歷結果和(先序或後序結果),還原建立二叉樹
阿新 • • 發佈:2018-12-20
主函式
int main(int argc, char** argv){
int n, m;
cin>>n;
for(int i=0;i<n;i++){
cin>>m;
v.push_back(m);
}
for(int i=0;i<n;i++){
cin>>m;
vv.push_back(m);
}
flag=(初始化);
struct TreeNode* B=BinaryTreeFromOrderings(0,n);
return 0;
}
中序跟後序
int flag; //flag初始化為序列元素的總個數n
vector< int> v,vv; //向量v儲存後序序列,vv儲存中序序列
struct TreeNode
{
struct TreeNode* Left;
struct TreeNode* Right;
int Data;
};
TreeNode* BinaryTreeFromOrderings(int left,int right)
{
if(right-left==0){
flag++;
return NULL;
}
TreeNode* node=new TreeNode;
node->Data=v[flag];
int rootIndex;
for(rootIndex=left;rootIndex<right;rootIndex++)
if(v[flag]==vv[rootIndex])
break;
flag--;
node->Right=BinaryTreeFromOrderings(rootIndex+1,right);
flag--;
node->Left=BinaryTreeFromOrderings(left,rootIndex);
return node;
}
中序跟先序
int flag; //flag初始化為0
vector< int> v,vv; //向量v儲存先序序列,vv儲存中序序列
struct TreeNode
{
struct TreeNode* Left;
struct TreeNode* Right;
int Data;
};
TreeNode* BinaryTreeFromOrderings(int left,int right)
{
if(right-left==0){
flag--;
return NULL;
}
TreeNode* node=new TreeNode;
node->Data=v[flag];
int rootIndex;
for(rootIndex=left;rootIndex<right;rootIndex++)
if(v[flag]==vv[rootIndex])
break;
flag++;
node->Left=BinaryTreeFromOrderings(left,rootIndex);
flag++;
node->Right=BinaryTreeFromOrderings(rootIndex+1,right);
return node;
}