根据二叉树的先序遍历和中序遍历重构二叉树
2010-12-13 23:51
211 查看
想法:分治,根据前序遍历来对中序遍历进行划分,分为左右子树
/* * test.cpp * * Created on: Dec 13, 2010 * Author: alfred */ #include <iostream> #include <string> using namespace std; struct node { char data; node* left; node* right; node(char data = '/0', node* left = NULL, node* right = NULL) { this->data = data; this->left = left; this->right = right; } }; void build_left(int, int, node*); void build_right(int, int, node*); int cur; string pre_tra, inorder_tra; int main() { node root; while(cin >> pre_tra >> inorder_tra) { root.data = pre_tra[0]; cur = 1; int pos = inorder_tra.find(pre_tra[0]); build_left(0, pos - 1, &root); build_right(pos + 1, inorder_tra.size(), &root); post_tra(&root); } return 0; } void build_left(int beg, int end, node* parent) { if(beg > end || cur >= pre_tra.size()) return; parent->left = new node(pre_tra[cur]); int pos = inorder_tra.find(pre_tra[cur]); cur++; build_left(beg, pos - 1, &(*parent->left)); build_right(pos + 1, end, &(*parent->left)); } void build_right(int beg, int end, node* parent) { if(beg > end || cur >= pre_tra.size()) return; parent->right = new node(pre_tra[cur]); int pos = inorder_tra.find(pre_tra[cur]); cur++; build_left(beg, pos- 1, &(*parent->right)); build_right(pos + 1, end, &(*parent->right)); }
相关文章推荐
- poj2255 根据任意二叉树的先序遍历和中序遍历求解后序遍历
- 1935. 二叉树重建(根据先序遍历和中序遍历重建二叉树并进行广度优先遍历)
- 每天一道LeetCode-----根据先序遍历和中序遍历还原二叉树
- 根据先序遍历和中序遍历建立二叉树
- 根据先序遍历序列和中序遍历序列重建二叉树
- 二叉树:根据二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 根据二叉树的先序遍历和中序遍历建立二叉树
- 根据二叉树的前序遍历和中序遍历,重构二叉树
- 根据先序遍历和中序遍历生成二叉树
- 根据二叉树的先序遍历和中序遍历重建二叉树
- 根据先序遍历和中序遍历创建二叉树
- 七:重建二叉树(根据先序遍历(或者后序遍历)和中序遍历重建二叉树)
- 根据前序和中序遍历序列重构二叉树 代码完整版
- 二叉树根据先序遍历和中序遍历,得到后序遍历
- 根据前序遍历和中序遍历重构二叉树
- Java实现——根据先序遍历和中序遍历,确定二叉树
- 根据先序遍历和中序遍历得出二叉树。最终以后序遍历的形式输出。
- 二叉树根据前序遍历和中序遍历重构确定唯一二叉树
- 给定先序:ABCDEFGHIJK 给定中序:CBEDGFAHJIK 首先分析上述给定的先,中序,首先得知先序遍历的肯定是二叉树的根节点:A,在看中序遍历,根据中序遍历的原理可知,在A左边的一定全部属于
- 根据二叉树的前序遍历和中序遍历,重构出二叉树