#include<iostream> #include<cstring> #include<cstdlib> #define MAXSIZE 100 typedef char ElemType ; typedef struct TNode{ ElemType data; struct TNode * LChild,*RChild; }Tree,*BiTree; char mid[MAXSIZE],pre[MAXSIZE]; BiTree create(char data){ BiTree q=(BiTree)malloc(sizeof(Tree)); q->data=data; q->LChild=NULL; q->RChild=NULL; return q; } BiTree BuildTree(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=BuildTree(preorder+1,inorder,index); newnode->RChild=BuildTree(preorder+index+1,inorder+index+1,len-index-1); } } void postorder(Tree*S){ if(S==NULL)return; postorder(S->LChild); postorder(S->RChild);std::cout<<S->data; } int main(){ char preorder[50]; char inorder[50]; std::cin>>preorder; std::cin>>inorder; int len=strlen(preorder); BiTree root=BuildTree(preorder,inorder,len); postorder(root); return 0; }为什么输出的不对
时间: 2024-02-19 14:01:46 浏览: 82
#include_iostream.h_
4星 · 用户满意度95%
您提供的代码中存在一个问题,即在 `BuildTree` 函数中,当 `len>1` 时,创建了新节点 `newnode`,但没有将其返回。这会导致程序无法正确构建二叉树。
修改方法:在 `BuildTree` 函数中添加 `return newnode;` 语句,将新节点返回即可。
另外,您可能需要注意输入的先序序列和中序序列是否合法。如果序列中存在非法字符或者序列长度不匹配等问题,都有可能导致程序输出不正确。
阅读全文