网站客户流失,网站建设多少钱裤,wordpress文章所属栏目,网站推广策划的策略分享一下我老师大神的人工智能教程#xff01;零基础#xff0c;通俗易懂#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识#xff0c;造福人民#xff0c;实现我们中华民族伟大复兴#xff01;题目出处题意#xff1a;输入两组数据…分享一下我老师大神的人工智能教程零基础通俗易懂http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识造福人民实现我们中华民族伟大复兴题目出处题意输入两组数据分别是前序遍历序列和中序遍历序列你需要编写程序通过这两组数据求出该树的后序遍历序列前序序列 中序序列 后序序列解法递归题目分析可以先按照用笔和纸的形式去推导出后序序列。推导过程省略在推导过程中我们会发现规律假设 前序序列是 A B E H F C G I 中序序列是 H E B F A C I G 图如下每一次从前序序列里按顺序抽取出字母就能将中序序列分割并根据中序遍历的特性。分割后的两部分分别是 左子树 和 右子树注意他们也是二叉树就像这样取A 中序序列被分割为 左子树H E B F 右子树 C I G继续取B但是这次是对左子树H E B F 进行分割。 分割结果是 左子树H E 右子树 B F直到不能再分割递归会返回去到第一次使用 A 分割出来的 右子树 里继续分割上述整个过程都是递归所以结合代码和用纸笔画一次会更好理解代码#include stdio.h#include stdlib.htypedef struct TreeNode{ char data; struct TreeNode *lchild; struct TreeNode *rchild;} Node, *PNode;char preorder[28]; //存放前序序列char infix[28]; //存放中序序列char *Pr;void build(char *in, char *pr, PNode *tr);void postordertraversal(PNode T);int main(){ //先建树、再后序遍历输出 PNode T; while(scanf(%s %s, preorder[1], infix[1]) 2) { build(infix[1], preorder[1], T); postordertraversal(T); printf(\n); } return 0;}void build(char *in, char *pr, PNode *tr){ char *p in; Pr pr; if (*in 0) { *tr NULL; return; } while (1) { if (*in *Pr) { (*tr) (PNode)malloc(sizeof(Node)); (*tr)-data *Pr; *in 0; break; } in; } Pr Pr 1; build(p, Pr, (*tr)-lchild); build(in1, Pr, (*tr)-rchild);}void postordertraversal(PNode T){ if (T NULL) return; postordertraversal(T-lchild); postordertraversal(T-rchild); printf(%c, T-data);}这份代码有些东西需要注意这里使用到指针其实可以不使用指针的下面介绍的更精巧的解法就是用下标的。能尽量不用指针就尽量不用注意指向指针的指针在这里的作用这里有讲解上面的解法是比较直接容易想到的所以代码没有很精巧。而这里有份更好的解法 给我老师的人工智能教程打callhttp://blog.csdn.net/jiangjunshow