中序,前序确定二叉树
/*
7
1 2 3 4 5 6 7
4 1 3 2 6 5 7
*/
int build1(int la,int ra,int lb,int rb)//以中序,先序推树
{
if(la>ra)return 0;
int root=b[lb];
int p1,p2;
p1=la;
while(a[p1]!=root){//找到父节点在中序遍历中的位置
p1++;
}
p2=p1-la;//以root为根节点的左子树的节点数
node[root].l=build1(la,p1-1,lb+1,lb+p2);
node[root].r=build1(p1+1,ra,lb+p2+1,rb);
cout<<root<<" "<<node[root].l<<" "<<node[root].r<<endl;
return root;
}
中序,后序确定二叉树
/*
7
1 2 3 4 5 6 7
2 3 1 5 7 6 4
*/
int build2(int la,int ra,int lb,int rb)//以中序,后序推树
{
if(la>ra)return 0;
int root=b[rb];
int p1,p2;
p1=la;
while(a[p1]!=root){//找到父节点在中序遍历中的位置
p1++;
}
p2=p1-la;//以root为根节点的左子树的节点数
node[root].l=build2(la,p1-1,lb,lb+p2-1);
node[root].r=build2(p1+1,ra,lb+p2,rb-1);
cout<<root<<" "<<node[root].l<<" "<<node[root].r<<endl;
return root;
}
二叉树确定后用bfs遍历就可以输出前,中,后,层次序列