结点:
typedef struct node{
int data;
struct node *lchild;
struct node *rchild;
}Node;
先序遍历(递归):
void prev(Node* root)
{
if(root!=NULL)
{
printf("%d ",root->data);
prev(root->lchild);
prev(root->rchild);
}
}
中序遍历(递归):
void mid(Node* root)
{
if(root!=NULL)
{
mid(root->lchild);
printf("%d ",root->data);
mid(root->rchild);
}}
后序遍历(递归):
void pro(Node* root)
{
if(root!=NULL)
{
pro(root->lchild);
pro(root->rchild);
printf("%d ",root->data);
}
}
已知先序遍历和后序遍历,求中序遍历:
先序遍历的第一个和后序遍历的最后一个是root
而先序遍历的第二个不是root的lchild就是rchild
如果先序遍历的第二个=后序遍历的倒数第二个,则是root的rchild
如果先序遍历的第二个≠后序遍历的倒数第二个,则是root的lchild
递归下去.