UVA548 中序后序构造二叉树
2017-04-20 20:08
477 查看
详见紫书p157
代码:
#include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> #include <cmath> #include <vector> #include <sstream> using namespace std; const int maxn = 10010; const int inf = 0x3f3f3f3f; int n; int inOrder[maxn],postOrder[maxn]; struct node{ int value; node *left,*right; node():left(NULL), right(NULL){}; }*root; node *newNode(){ return new node(); } bool read(int *a){ string line; if(!getline(cin, line)) return false; stringstream t; t<<line; n = 0; int x; while (t>>x) { a[n++] = x; } return n>0; } void removeTree(node *u){ if(u==NULL){ return; } removeTree(u->left); removeTree(u->right); delete u; } node *build(int l1, int r1, int l2, int r2){ if(l1>r1) return NULL; node *index = newNode(); int father = postOrder[r2]; index->value = father; int p = l1; while(inOrder[p]!=father){ p++; } int leftChildern = p-l1; index->left = build(l1, p-1, l2, l2+leftChildern-1); index->right = build(p+1, r1, l2+leftChildern, r2-1); return index; } int now,nowSum; void dfs(node *u, int sum){ sum += u->value; if(u->left==NULL&&u->right==NULL){ if(sum<nowSum || (sum==nowSum&&u->value<now)){ now = u->value; nowSum = sum; } } if(u->left!=NULL) dfs(u->left, sum); if(u->right!=NULL) dfs(u->right, sum); } int main(){ while(read(inOrder)){ read(postOrder); root = build(0, n-1, 0, n-1); nowSum = inf; dfs(root, 0); printf("%d\n",now); removeTree(root); } return 0; }
相关文章推荐
- UVA 548 Tree 中序+后序构造二叉树dfs
- 【UVA 548 Tree】二叉树构造 & 遍历
- UVA 548 Tree(中序+后序还原二叉树)
- uva548 比较经典的知道两种遍历序列构造二叉树,注意后面的dfs的回溯
- UVA 548 根据中序和后序建立二叉树并求根到叶的最短路
- UVA548递归二叉树求路径和和根据中序和后序建立二叉树
- uva 548 - Tree 二叉树重构(中序和后序)+dfs
- UVA - 548 Tree 二叉树
- 105.leetcode Construct Binary Tree from Preorder and Inorder Traversal(medium)[先序、中序构造二叉树]
- 通过树的先序和中序遍历序列来构造二叉树
- 通过二叉树的中序和后序遍历序列构造二叉树(非递归)
- 由先序和中序构造二叉树并后序输出
- [Leetcode] Construct binary tree from inorder and postorder travesal 利用中序和后续遍历构造二叉树
- UVa 二叉树重建(先序+中序求后序)
- UVa 548 Tree【二叉树的递归遍历】
- 紫书章六例题八 UVA 548 (中序后序建树,前序遍历求值)
- PHP 使用二叉树的先序和中序遍历结果构造二叉树
- 根据前序遍历和中序遍历,构造二叉树
- 前序遍历和中序遍历树构造二叉树 && 中序遍历和后序遍历树构造二叉树
- 6_8 树(UVa548)<从中序和后序恢复二叉树>