浙大PTA-《数据结构》中文题目集7-4 是否同一棵二叉搜索树
·

最笨的方法,即有先序序列和中序序列可以唯一的确定一棵二叉树,可以用来判断生成的树是否相同
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
//是否是同一颗二叉搜索树
typedef struct TreeNode{
int data;
struct TreeNode* left;
struct TreeNode* right;
}TreeNode;
//由前序序列和中序序列可以唯一确定一棵二叉树
//建树
TreeNode* createTree(TreeNode* root,int data){
if(root == NULL){
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}else if(root->data > data){
root->left = createTree(root->left,data);
}else if(root->data < data){
root->right = createTree(root->right,data);
}
return root;
}
//访问结点
void visit(TreeNode* node){
if(node == NULL){
printf("NULL ");
}else{
printf("%d",node->data);
}
}
//递归先序遍历
void preOrder(TreeNode* root, char *pre, int *index){
if(root != NULL){
pre[(*index)++] = root->data+'0';
preOrder(root->left,pre,index);
preOrder(root->right,pre,index);
}
}
//递归中序遍历
void inOrder(TreeNode* root, char *in, int *index){
if(root != NULL){
in[(*index)++] = root->data +'0';
inOrder(root->left,in,index);
inOrder(root->right,in,index);
}
}
int main(){
int N,L;
while(scanf("%d",&N) == 1 && N!=0){
scanf("%d",&L);
//建立初始树
TreeNode* root = NULL;
//初始树的两个序列
int pre_index=0,in_index = 0;
char *pre = (char*)malloc((N+1)*sizeof(char));
char *in = (char*)malloc((N+1)*sizeof(char));
for(int i = 0; i < N; i++){
int data;
scanf("%d",&data);
root = createTree(root,data);
}
preOrder(root,pre,&pre_index);
inOrder(root,in,&in_index);
pre[pre_index] = '\0';
in[in_index] = '\0';
//检查
for(int i = 0; i < L; i++){
TreeNode* tempRoot = NULL;
int temp_pre_index=0,temp_in_index = 0;
char *temp_pre = (char*)malloc((N+1)*sizeof(char));
char *temp_in = (char*)malloc((N+1)*sizeof(char));
for(int j = 0; j < N; j++){
int data;
scanf("%d",&data);
tempRoot = createTree(tempRoot,data);
}
preOrder(tempRoot,temp_pre,&temp_pre_index);
inOrder(tempRoot,temp_in,&temp_in_index);
temp_pre[temp_pre_index] = '\0';
temp_in[temp_in_index] = '\0';
if(strcmp(pre,temp_pre) == 0 && strcmp(in,temp_in) == 0){
printf("Yes\n");
}else{
printf("No\n");
}
}
}
return 0;
}
更多推荐
所有评论(0)