求后序遍历

#include <bits/stdc++.h>
using namespace std;
string s1,s2;
void calc(int l1,int r1,int l2,int r2)
{
int m=s2.find(s1[l1]);
if(m>l2) calc(l1+1,l1+m-l2,l2,m-1);
if(m<r2) calc(l1+m-l2+1,r1,m+1,r2);
cout<<s1[l1];
}
int main()
{
cin>>s1>>s2;
calc(0,s1.length()-1,0,s2.length()-1);
cout<<endl;
return 0;
}
### 构造二叉树并获取后序遍历 通过给定的前序遍历 `preorder` 和中序遍历 `inorder` 数组可以构建唯一的二叉树。一旦构造完成,可以通过深度优先搜索(DFS)算法中的后续遍历来访问该树。 #### 前序和中序遍历构造二叉树原理 前序遍历的第一个元素总是根节点,在中序遍历中找到这个根节点的位置,则可区分出左子树和右子树[^1]。基于此特性,递归地处理左右子树部分即可重建整个二叉树。 ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def buildTree(preorder, inorder): if not preorder or not inorder: return None root_val = preorder[0] root_index_in_inorder = inorder.index(root_val) root = TreeNode(root_val) # 左子树由前序遍历去掉第一个元素后的前面一部分以及中序遍历对应位置之前的部分组成 root.left = buildTree(preorder[1:root_index_in_inorder + 1], inorder[:root_index_in_inorder]) # 右子树由前序遍历剩余部分以及中序遍历对应位置之后的部分组成 root.right = buildTree(preorder[root_index_in_inorder + 1:], inorder[root_index_in_inorder + 1:]) return root ``` #### 获取后序遍历序列方法 对于已经建立好的二叉树,采用迭代或递归的方式实现后序遍历,即按照“左->右->根”的顺序依次访问各个结点,并记录下这些结点值形成最终的后序遍历列表。 ```python def postorderTraversal(root): result = [] def traverse(node): if node is None: return traverse(node.left) traverse(node.right) result.append(node.val) traverse(root) return result ``` 将上述两段代码结合起来就可以根据输入的前序和中序遍历结果得到对应的后序遍历序列[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值