为什么全是no #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; } } void iszhengze(BiTree root,int*a){ if(root){ if(*a==0)return; if((root->LChild==NULL&&root->RChild!=NULL)||(root->LChild==NULL&&root->RChild!=NULL)){ *a=0; } iszhengze(root->LChild,&(*a)); iszhengze(root->RChild,&(*a)); } } 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 a=1; iszhengze(root,&a); if(a==0)std::cout<<"No"; else std::cout<<"Yes"; return 0; }
时间: 2024-01-25 11:02:35 浏览: 79
vc++2008编译不了#include<iostream.h>头文件
4星 · 用户满意度95%
在代码中,如果输入的先序遍历序列和中序遍历序列对应的二叉树不是一棵真正的二叉搜索树,那么输出结果就是"No",否则输出"Yes"。这里的问题可能出在iszhengze函数的判断条件上。
```
if((root->LChild==NULL&&root->RChild!=NULL)||(root->LChild==NULL&&root->RChild!=NULL))
```
这个条件判断的逻辑是:如果当前节点的左子树为空、右子树不为空,或者左子树不为空、右子树为空,那么就判定这个二叉树不是搜索树。但是这个条件判断中,对于右子树的判断条件写成了两次"root->RChild!=NULL",而左子树的判断条件写成了两次"root->LChild==NULL",这个条件判断的逻辑有点不合理。
所以,可以尝试修改iszhengze函数中的条件判断,将右子树的判断条件改为"root->LChild!=NULL",即左子树不为空即可。修改后的代码如下:
```
void iszhengze(BiTree root, int *a){
if(root){
if(*a==0) return;
if((root->LChild==NULL&&root->RChild!=NULL)||(root->LChild!=NULL&&root->RChild==NULL)){
*a=0;
}
iszhengze(root->LChild,&(*a));
iszhengze(root->RChild,&(*a));
}
}
```
这样修改之后,如果输入的先序遍历序列和中序遍历序列对应的二叉树不是一棵真正的二叉搜索树,那么输出结果就是"No",否则输出结果就是"Yes"。
阅读全文