由前序遍历和中序遍历重建二叉树,再有后序遍历方法输出后序遍历
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Node
{
char value;
Node *left, *right;
};
Node *build_new_node(char ch)
{
Node *p = (Node*)malloc(sizeof(Node));
p->value = ch;
p->left = p->right = NULL;
return p;
}
Node *rebuild(char* pre, char* in, int n)
{
if(n <= 0)
return NULL;
Node *p = build_new_node(pre[0]);
int k = strchr(in,pre[0])-in;
p->left = rebuild(pre+1, in, k);
p->right = rebuild(pre+k+1, in+k+1, n-k-1);
return p;
}
void postOrder(Node *p)
{
if(p == NULL)
return ;
postOrder(p->left);
postOrder(p->right);
printf("%c",p->value);
}
int main()
{
char preOrder[30],inOrder[30];
while(~scanf("%s%s",preOrder,inOrder))
{
Node *root = rebuild(preOrder,inOrder,strlen(preOrder));
postOrder(root);
printf("\n");
}
return 0;
}
由后序遍历和中序遍历重建二叉树,再有前序遍历方法输出前序遍历
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Node
{
char value;
Node *left, *right;
};
Node *build_new_node(char ch)
{
Node *p = (Node*)malloc(sizeof(Node));
p->value = ch;
p->left = p->right = NULL;
return p;
}
Node *rebuild(char* post, char* in, int n)
{
if(n <= 0)
return NULL;
int k = strchr(in, post[n-1])-in;
Node *p = build_new_node(post[n-1]);
p->left = rebuild(post, in, k);
p->right = rebuild(post+k, in+k+1, n-k-1);
return p;
}
void preOrder(Node *p)
{
if(p == NULL)
return ;
printf("%c",p->value);
preOrder(p->left);
preOrder(p->right);
}
int main()
{
char postOrder[30],inOrder[30];
while(~scanf("%s%s",postOrder,inOrder))
{
Node *root = rebuild(postOrder,inOrder,strlen(postOrder));
preOrder(root);
printf("\n");
}
return 0;
}