#include<iostream> #include<stdlib.h> #include<cstring> typedef struct node{ char data; struct node*LChild; struct node*RChild; }Tree,*BiTree; BiTree create(char data){ BiTree q; q=(BiTree)malloc(sizeof(Tree)); q->LChild=NULL; q->RChild=NULL; return q; } BiTree TreeBuild(char *preorder,char*inorder,int len){ if(len==0)return NULL; else if(len==1)return create(*preorder); else{ BiTree newnode=create(*preorder); int index=0; for(int i=0;i<len;i++){ if(*(inorder+i)==*(preorder)) index=i; break; } newnode->LChild=TreeBuild(preorder+1,inorder,index); newnode->RChild=TreeBuild(preorder+index+1,inorder+index+1,len-index-1); return newnode; } } int iszhengze(BiTree root){ if(root){ if((root->LChild!=NULL&&root->RChild==NULL)||(root->LChild==NULL&&root->RChild!=NULL)){ return 0; } iszhengze(root->LChild); iszhengze(root->RChild); } } int main(){ BiTree root; char pre[100],in[100]; std::cin>>pre; std::cin>>in; int len=strlen(pre); root=TreeBuild(pre,in,len); int m=iszhengze(root); if(m==0)std::cout<<"No"; else std::cout<<"Yes"; return 0; }为什么我输入ABC。 BAC。输出No啊 怎么改
时间: 2024-02-07 11:02:51 浏览: 68
你的代码中存在一个问题,就是在查找根节点在中序遍历中的位置的时候,for循环中的break位置有误,导致无法正确地找到根节点在中序遍历中的位置。你可以将break放在if语句的外面,这样可以确保找到根节点在中序遍历中的位置后再退出循环。同时,你的iszhengze函数中也存在一个问题,就是在查找左右子树是否为空的时候,只判断了当前节点的左右子树是否为空,而没有判断左右子树的子树是否为空。这个问题可以通过递归调用iszhengze函数来解决。下面是修改后的代码:
```c++
#include<iostream>
#include<stdlib.h>
#include<cstring>
typedef struct node{
char data;
struct node*LChild;
struct node*RChild;
}Tree,*BiTree;
BiTree create(char data){
BiTree q;
q=(BiTree)malloc(sizeof(Tree));
q->data=data;
q->LChild=NULL;
q->RChild=NULL;
return q;
}
BiTree TreeBuild(char *preorder,char*inorder,int len){
if(len==0)return NULL;
else if(len==1)return create(*preorder);
else{
BiTree newnode=create(*preorder);
int index=0;
for(int i=0;i<len;i++){
if(*(inorder+i)==*(preorder)){
index=i;
break;
}
}
newnode->LChild=TreeBuild(preorder+1,inorder,index);
newnode->RChild=TreeBuild(preorder+index+1,inorder+index+1,len-index-1);
return newnode;
}
}
int iszhengze(BiTree root){
if(root==NULL) return 1;
if((root->LChild==NULL&&root->RChild==NULL)||
(root->LChild!=NULL&&root->RChild!=NULL)){
return iszhengze(root->LChild)&&iszhengze(root->RChild);
}
return 0;
}
int main(){
BiTree root;
char pre[100],in[100];
std::cin>>pre;
std::cin>>in;
int len=strlen(pre);
root=TreeBuild(pre,in,len);
int m=iszhengze(root);
if(m==0)std::cout<<"No";
else std::cout<<"Yes";
return 0;
}
```
你可以试一下这份代码,看看是否可以解决你的问题。
阅读全文