Sicily 1935. 二叉树重建
来源:互联网 发布:社会主义建筑风格 知乎 编辑:程序博客网 时间:2024/05/06 16:17
根据前序遍历和中序遍历,求宽搜遍历结果。
容易知道的是,前序的第一个节点在中序中的位置可以将中序遍历的结果划分为左右子 树两个区间,同理第二个节点可以继续将左子树划分为左右子树两个区间……这样下去,当左边不再存在区间时,返回上一级,对另一半的区间进行划分,重复上述步骤,直到全部划分完毕。
这个过程可以用递归实现。另外,虽然题目说是二叉树重建,网上的代码也基本上重建了二叉树,但我觉得这挺麻烦的,就不重建了……
Run Time: 0sec
Run Memory: 312KB
Code length: 1916Bytes
SubmitTime: 2011-12-29 16:42:02
// Problem#: 1935// Submission#: 1150478// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/// All Copyright reserved by Informatic Lab of Sun Yat-sen University#include <iostream>#include <string>using namespace std;string s1, s2;int node, level[ 26 ]; void build( int bot, int top, int n ) { if ( bot <= top ) { node++; int i = bot; while ( s1[ node ] != s2[ i ] ) i++; level[ node ] = n; build( bot, i - 1, n + 1 ); build( i + 1, top, n + 1 ); }} int main() { int T; int i, j; int count, size; cin >> T; while ( T-- ) { cin >> s1 >> s2; size = s1.size(); node = 0; i = 0; while ( s1[ node ] != s2[ i ] ) i++; level[ node ] = 0; build( 0, i - 1, 1 ); build( i + 1, size - 1, 1 ); count = 0; for ( i = 0; count < size; i++ ) { for ( j = 0; j < size; j++ ) { if ( i == level[ j ] ) { cout << s1[ j ]; count++; } } } cout << endl; } return 0; }
- Sicily 1935. 二叉树重建
- Sicily 1935. 二叉树重建
- sicily 1935. 二叉树重建
- Sicily 1935. 二叉树重建
- [sicily]1935. 二叉树重建
- Sicily 1935 二叉树重建
- Sicily 1935 二叉树重建
- 1935. 二叉树重建
- Sicily 1210 二叉树
- Sicily 1210. 二叉树
- sicily 1210 二叉树
- Sicily 1210(二叉树)
- Sicily 1210. 二叉树
- Sicily 1210 二叉树
- Sicily 1210. 二叉树
- Sicily 1210. 二叉树
- [sicily]1210. 二叉树
- sicily 1210. 二叉树
- NSObject的奥秘
- Sicily 1818. 成绩转换
- xpath常用语法
- 如何将你的android手机和outlook的通讯录同步?
- 我的寒假!!!
- Sicily 1935. 二叉树重建
- 拜读大牛Ulrich Drepper大作之How To Write Shared Libraries
- Sicily 1936. Knight Moves
- 没有Win8只有Win手机 微软亲自画下句号
- Memory on the iPhone
- 真正的全能文件批量重命名工具(命令形式)
- Sicily 1940. Ordering Tasks
- 如何在div中得背景图片上加链接
- Git 的优势