#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; }为什么全部输出No
时间: 2024-02-23 16:57:11 浏览: 28
这段代码是为了判断输入的先序遍历和中序遍历是否能够构建出一颗正确的二叉树。但是代码中存在一个问题,就是在查找根节点在中序遍历中的位置时,应该是使用 `*(inorder+i)==*(preorder)` 而不是 `*(inorder+i)==*(preorder)`,即应该使用 `*(inorder+i)==*(preorder)`。因此,您需要将代码中的 `*(preorder)` 改为 `*(preorder+i)`。
相关问题
#include <iostream> #include <stdlib.h> using namespace std; class listNode { public: char data; // each listNode contains a character struct listNode *nextPtr; // pointer to next node typedef class listNode ListNode; // synonym for struct listNode
你的第一个问题是一个代码片段,是吗?那我猜测你想问的是,这段代码是用来干什么的?
这段代码定义了一个名为"listNode"的类,该类包含一个字符数据成员和一个指向下一个节点的指针。此外,类中还定义了一个名为"ListNode"的同义词,用于表示结构体"listNode"。这个类可以用来创建一个链表数据结构。
#include <iostream> #include <cstdlib> using namespace std; // self-referential structure struct listNode { char data; // each listNode contains a character struct listNode *nextPtr; // pointer to next node }; typedef struct listNode ListNode; // synonym for struct listNode typedef ListNode *ListNodePtr; // synonym for ListNode* // prototypes void insert(ListNodePtr *sPtr, char value); char delete(ListNodePtr *sPtr, char value); int isEmpty(ListNodePtr sPtr); void printList(ListNodePtr currentPtr); void instructions(void);
这段代码存在两个问题:
1. 第一行代码 "#include <iostream> #include <cstdlib>" 中间缺少了换行符,应该写成 "#include <iostream>\n#include <cstdlib>" 以便阅读。
2. C++ 中的 "delete" 是一个保留关键字,不能用作函数名。因此,函数名中的 "delete" 应该改成其他的名字,例如 "deleteNode"。
阅读全文