二叉树--先序中序遍历求后序遍历

news/2024/7/2 23:10:28

先序遍历:根 左 右

中序遍历:左 根 右

后序遍历:左 右 根

我们可以先从先序遍历中找到根节点,由于知道了根节点那么可以依靠中序遍历找到左子树,右子树。这样再去先序遍历中找到左子树的根节点,然后再依靠中序遍历找到左子树的左子树(右子树同理)。这样层层递归就能还原二叉树。之后求出后序遍历。

感谢原博主http://www.cnblogs.com/rain-lei/p/3576796.html 一开始递归不会写,看了博主的发现其实很简单。注意还原二叉树时return root。

#include<stdio.h>
int n;
typedef struct btnode{int data;struct btnode *left;struct btnode *right;
}treenode;                  //定义二叉树节点
int preorder[1001];            //先序遍历
int inorder[1001];            //中序遍历  treenode *gettree(int prel,int prer,int inl,int inr){   //根据先序中序还原二叉树if(prel>prer)return NULL;treenode *root;     root=new treenode;root->data=preorder[prel];if(prel==prer){root->left=NULL;root->right=NULL;return root;}int temp;  //记录根节点在中序遍历中的位置for(int i=1;i<=inr;i++)if(inorder[i]==preorder[prel]){temp=i;break;}root->left=gettree(prel+1,prel+(temp-inl),inl,temp-1); //还原左子树root->right=gettree(prel+(temp-inl)+1,prer,temp+1,inr);//还原右子树return root;
}
void postorder(treenode *t){          //后序遍历二叉树if(t!=NULL){postorder(t->left);postorder(t->right);printf("%d\n",t->data);}
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&preorder[i]);for(int i=1;i<=n;i++)scanf("%d",&inorder[i]);treenode *tree=gettree(1,n,1,n);postorder(tree);
}

 

转载于:https://www.cnblogs.com/lvcoding/p/6589669.html


http://lihuaxi.xjx100.cn/news/242680.html

相关文章

python re模块_Python re模块

正则表达式元字符说明. 匹配除换行符以外的任意字符^ 匹配字符串的开始$ 匹配字符串的结束[] 用来匹配一个指定的字符类别? 对于前一个字符字符重复0次到1次* 对于前一个字符重复0次到无穷次{} 对于前一个字符重复m次{m,n} 对前一个字符重复为m到n次\d 匹配数字&#xff0c;相…

CSS3颜色不透明度如何设置

web前端技术包含HTML和CSS样式&#xff0c;两者是相辅相成的&#xff0c;学习CSS样式不必可少&#xff0c;那么在学习CSS样式中&#xff0c;CSS3颜色不透明度如何设置?在CSS3之前&#xff0c;我们设置颜色的方式包含十六进制颜色(如#F00)、rgb模式颜色、或指定颜色的英文名称(…

MD5与Base64的思考

MD5加密是对任意长的数据使用MD5哈稀算法散列为4个32位组,若格式化为ASCII字符则为16字符,若格式化16进制表示,则为32字符. (MD5的具体算法请参阅相关书籍和资料)MD5广泛用于数据校验和完整性检验.且不可逆.理论上为抗碰撞的在2004年8月17日,MD5遭遇重创,山东大学的王小云做了…

org.apache.ibatis.binding.BindingException: Type interface XXX is not known to the MapperRegistry.

动态代理因为namespace的地方写错了转载于:https://www.cnblogs.com/wth21-1314/p/6590968.html

修正的判定条件覆盖例题_如何用一个例子彻底解释白盒测试中语句覆盖、判定覆盖、条件覆盖、条件判定覆盖、条件组合覆盖?...

java测验的类型&#xff1f;黑盒测验&#xff1f;白盒测验&#xff1f;灰盒测验&#xff1f;白盒测验(White-box Testing&#xff0c;又称逻辑驱动测验,结构测验)是把测验目标看作一个翻开的盒子。运用白盒测验法进行动态测验时&#xff0c;需求测验软件产品的内部结构和处理进…

Java中父类方法重写有哪些需要注意的?

在继承关系中&#xff0c;子类会自动继承父类中公共的方法&#xff0c;但有时在子类中需要对继承的方法进行一些修改&#xff0c;即对父类的方法进行重写。需要注意的是&#xff0c;子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。 在上一节…

\\s+ split替换

出自&#xff1a; http://www.tuicool.com/articles/vy2ymm 详解 "\\s" 正则表达式中\s匹配任何空白字符&#xff0c;包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v] \f -> 匹配一个换页\n -> 匹配一个换行符\r -> 匹配一个回车符\t -> 匹配一个制表…

baidumap api MySQL_百度地图API开发笔记一(基础篇)

什么是百度地图API&#xff1f;百度地图API是一套由JavaScript语言编写的应用程序接口&#xff0c;它能够帮助您在网站中构建功能丰富、交互性强的地图应用。百度地图API包含了构建地图基本功能的各种接口&#xff0c;提供了诸如本地搜索、路线规划等数据服务。测试js API代码(…