已知二叉树先序遍历中序遍历求后序遍历
来源:互联网 发布:麦克尼尔人类网络 编辑:程序博客网 时间:2024/06/08 00:00
思路简介:
①先序遍历中第一个字母即为根节点,在中序遍历中找到根节点的位置
②把中序遍历的字符串序列从根节点分成两部分,左侧一部分构建左子树,右侧一部分构建右子树
③在②的基础上在先序遍历中也找到构建左右子树的部分
④递归还原二叉树
⑤后序遍历输出即可
#include <iostream>#include <string>using namespace std ;struct node{ node *left ; node *right ; char data ;};node *reroot(string s1, string s2){ node *root = NULL ; //建立新的结点 if(s1.size() > 0 ) { root = new node() ; root -> data = s1[0] ; root -> left = NULL ; root -> right = NULL ; } if( s1.size() > 1 ) { //找到根节点 int root_position = s2.find(root->data); //重建左子树 string pre_left = s1.substr(1,root_position); string in_left = s2.substr(0,root_position) ; root -> left = reroot(pre_left,in_left); //重建右子树 string pre_right = s1.substr(root_position + 1, s1.size()); string in_right = s2.substr(root_position + 1 ,s2.size()) ; root -> right = reroot(pre_right,in_right); } return root ;}//后序遍历void postorder(node *root){ if(root) { postorder(root->left); postorder(root->right); cout << root -> data ; }}int main(){ int number = 0 ; cin >> number ; for(int i = 0 ; i < number ; i ++ ) { string preorder ; string inorder ; cin >> preorder >> inorder ; node *root = reroot(preorder,inorder); postorder(root); cout << endl ; }}
阅读全文
0 0
- 已知二叉树先序遍历中序遍历求后序遍历
- 已知二叉树前序,中序遍历,求后序遍历,java实现
- POJ 2255 二叉树遍历 已知前序遍历 中序遍历 求后序遍历
- 已知二叉树后序遍历和中序遍历,求前序遍历
- 已知二叉树先序遍历,中序遍历创建二叉树并输出后序遍历
- 已知二叉树先序遍历中序遍历求其后序遍历、重建二叉树
- 已知二叉树的前序遍历和中序遍历求后序遍历(二叉树)
- 二叉树系列:已知二叉树的中序遍历和前序遍历,求后序遍历
- 已知先序遍历和中序遍历求后序遍历——二叉树
- 已知二叉树的中序遍历和前序遍历,如何求后序遍历
- 已知二叉树的中序遍历和前序遍历,如何求后序遍历
- 已知二叉树的前序遍历和中序遍历求后序遍历
- 二叉树已知前序遍历和中序遍历,编程求后序遍历。
- 已知二叉树的前序遍历中序遍历,求后序遍历
- 已知先序遍历和中序遍历求后序遍历——二叉树
- 已知二叉树的先序遍历和中序遍历,如何求后序遍历
- java实现二叉树已知先序遍历和中序遍历求后序遍历
- 六、树和二叉树--(3)已知先序遍历和中序遍历求后序遍历
- 菜鸟之C语言初涉(初学编程之总结系列)
- LeetCode -- Target Sum
- python2与python3的字符串编码对比
- python 获取脚本所在目录的正确方法
- 深度学习在医学领域
- 已知二叉树先序遍历中序遍历求后序遍历
- Java泛型简介(6)
- 1.zookeeper/paxos介绍
- node模块间传值(global、module.exports、exports)
- IPtables中SNAT、DNAT和MASQUERADE的含义
- 学生信息管理系统1——系统设计怎样开始?
- intrins.h文件解读
- 古代探案杂谈
- 开启Linux 路由转发功能