题目
答案
#include
#include
using namespace std;
typedef struct tree* Tree;
struct tree{int data;Tree left,right;
};
int after[40],mid[40];
Tree build_tree(int root,int start,int end)
{if(start>end) return NULL;int i;for(i&#61;start;i<&#61;end;i&#43;&#43;)if(mid[i]&#61;&#61;after[root]) break;Tree tmp;tmp&#61;(Tree)malloc(sizeof(struct tree));tmp->data&#61;after[root];tmp->left&#61;build_tree(root-1-(end-i),start,i-1);tmp->right&#61;build_tree(root-1,i&#43;1,end);return tmp;
}void print_tree(Tree tmp)
{if(tmp){cout<<" "<<tmp->data;print_tree(tmp->left);print_tree(tmp->right);}
}
int main()
{int n;cin>>n;for(int i&#61;0;i<n;i&#43;&#43;)cin>>after[i];for(int i&#61;0;i<n;i&#43;&#43;)cin>>mid[i];cout<<"Preorder:";print_tree(build_tree(n-1,0,n-1));
}
注意
- 在函数中创建的tmp结构体变量要记得动态分配内存&#xff08;即malloc&#xff09;
- buildTree函数最后记得返回tmp
特别强调
函数中的i千万不要设置为全局变量&#xff0c;因为在递归调用时会出错。
先看代码&#xff1a;
tmp->left&#61;buildTree(root-1-(end-i),start,i-1);
tmp->right&#61;buildTree(root-1,i&#43;1,end);
在这段代码中&#xff0c;如果将i设置为全局变量&#xff0c;i的值会在第一句调用后改变&#xff0c;第二行传进去的i&#43;1值就是错的了
&#xff08;我看着原来的代码看了看了快一个小时&#xff0c;愣是没看出问题&#xff0c;最后还是用控制变量法才找到问题所在&#xff0c;千万别学我哈&#xff09;
总结
我看了网上的版本&#xff0c;有的是纯数组&#xff0c;有的是一堆指针看得我头晕&#xff0c;我就做了一定的中和&#xff0c;得出这个使用结构体的一般版本