后续遍历---树、深搜

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

给出一棵二叉树的前序和中序遍历的结果,还原这棵二叉树并输出其后序遍历的结果。

提示:分而治之——化大为小,化小为无
输入

每个测试点(输入文件)有且仅有一组测试数据。

每组测试数据的第一行为一个由大写英文字母组成的字符串,表示该二叉树的前序遍历的结果。

每组测试数据的第二行为一个由大写英文字母组成的字符串,表示该二叉树的中序遍历的结果。

对于100%的数据,满足二叉树的节点数小于等于26。

输出

对于每组测试数据,输出一个由大写英文字母组成的字符串,表示还原出的二叉树的后序遍历的结果。

样例输入
AB
BA
样例输出
BA

#include "iostream"
#include "string"
#include "algorithm"
#include "vector"
using namespace std;

string post;

void post_order(string pre, string in)
{
    if(pre.length() == 0 || in.length() == 0)
        return;
    char root = pre[0];  //找到根结点
    int pos = in.find(root, 0);  //找到根节点在中序遍历中的位置
    int len1 = pos;  //中序pos左半部分长度
    int len2 = pre.length() - pos - 1;  //中序pos右半部分长度
    post_order(pre.substr(1, len1), in.substr(0, len1));  //post_order(前序位置1开始的len1长度部分,中序pos位置的左半部分)
    post_order(pre.substr(len1+1, len2), in.substr(pos+1, len2)); //post_order(前序位置len1开始右半部分,中序pos位置的右半部分)
    cout << root;  
}

int main() 
{
    string pre, in;
    cin >> pre >> in;
    post_order(pre, in);
    return 0;
}
### 结构上的差分算法及应用 #### 差分概念的理解 差分是一种用于高效处理区间更新和查询的技术。对于一维数组而言,通过构建差分数组可以快速完成区间的增量操作并求得前缀和来恢复原始数值变化情况[^3]。 当这一理念被推广到形结构之上时,则形成了所谓的“上差分”。其核心思想是在不改变原有逻辑关系的前提下,利用额外的数据记录路径之间的差异信息以便于后续计算。 #### 实现方法 为了在中执行有效的差分运算,通常采用如下策略: - **边权差分**:针对每条连接两个节点u,v的无向边赋予初始权重w(u,v),之后如果要对某棵子内的所有结点施加相同的增加值k,只需调整进入该子根部唯一入口处那条边的权重即可。 增量表达式为`Δw(parent,child)=k`,其中parent指向即将受到影响区域之外最近的一个祖先位置而child即为对应子内部任选代表性的成员之一。 - **点权差分**:此方式侧重于标记特定顶点而非它们之间连线部分的变化趋势。具体做法是对选定范围两端端点分别打±k标签(起点+终点−),再经由度优先索(DFS)遍历整棵累加经过各定点所携带标志值得总合从而得出最终结果。 ```python from collections import defaultdict def dfs(node, parent, diff_values, tree_structure): result = diff_values[node] for neighbor in tree_structure[node]: if neighbor != parent: result += dfs(neighbor, node, diff_values, tree_structure) return result # 构建图结构 (假设输入已经给出) tree_structure = defaultdict(list) edges_with_weights = [(0, 1), (1, 2), ... ] # 这里省略实际边列表... for u, v in edges_with_weights: tree_structure[u].append(v) tree_structure[v].append(u) # 对某些节点或边上做差分标记 diff_values = [0]*len(tree_structure) # 更新指定节点/边的差分值... # 计算每个节点的实际影响值 actual_impact_per_node = [] for i in range(len(diff_values)): actual_impact_per_node.append(dfs(i,-1,diff_values.copy(),tree_structure)) ``` 上述代码片段展示了如何基于给定的一组边建立邻接表表示法下的未加权无向连通图,并实现了简单的过程用以传播从源至汇沿途累积起来的影响因子。 #### 应用场景 状差分技术广泛应用于解决涉及频繁修改局部属性同时又需即时反馈整体状态的问题当中,比如社交网络中的好友推荐系统、文件系统的权限管理机制以及地理信息系统(GIS)里的最短路径规划等领域都可见其身影。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值