你的样子

本文探讨了记忆中的人与事随着时间流逝而产生的变化。作者通过描述自己心中对于某个人的记忆,反思了过去的经历与当下的生活之间的关系。
最近很多种情况脑海都浮现出你的各种样子,

坦白说, 很长时间都没想起过你

那个离别的车站定格了我对你样子的记忆

是无助吗?

还是我胡思乱想了

过去了就过去吧

那些还没讲完的故事

毕竟,我有我的生活

你,有你的世界
### 二叉树结构构造过程 根据前序遍历 `ABCDEFG` 和中序遍历 `CEDFBAH` 构造的二叉树结构如下: - 根节点为 `A`,这是前序遍历的第一个字符。 - 在中序遍历中,`A` 将序列分为两部分:左侧为 `CEDFB`,表示左子树;右侧为 `H`,表示右子树。 左子树包含节点 `B`, `C`, `D`, `E`, `F`,根据前序遍历顺序,`B` 是左子树的根节点。在中序遍历中,`CEDFC` 被 `B` 分为左子树和右子树,其中 `CEDF` 是 `B` 的左子树,`C` 作为其右子树的根节点。继续递归分析,`C` 的左子树由 `E`, `D`, `F` 构成,其中 `E` 是 `C` 的左子节点,`D` 是 `C` 的右子节点,而 `F` 是 `D` 的左子节点。 右子树由 `G` 作为根节点,其左子树为空,右子树包含 `H`,因此 `H` 是 `G` 的右子节点。 最终构造的二叉树结构如下: ``` A / \ B G / \ \ C F H / \ E D ``` ### 后序遍历验证 通过后序遍历(左子树 → 右子树 → 根节点)可以验证二叉树结构是否正确。该二叉树的后序遍历结果为 `E D F C B H G A` [^1]。 ### 代码实现 以下是用于构建并验证该二叉树的 C++ 实现代码: ```cpp #include <iostream> #include <unordered_map> #include <string> using namespace std; // 定义二叉树节点结构体 struct BiNode { char data; BiNode* lchild; BiNode* rchild; }; // 根据前序遍历和中序遍历构建二叉树 BiNode* buildTree(string preorder, string inorder, int inStart, int inEnd, unordered_map<char, int>& indexMap) { static int preIndex = 0; if (inStart > inEnd) { return nullptr; } // 前序遍历的第一个元素作为根节点 BiNode* node = new BiNode(); node->data = preorder[preIndex++]; // 在中序遍历中查找根节点的位置 int inIndex = indexMap[node->data]; // 构建左子树和右子树 node->lchild = buildTree(preorder, inorder, inStart, inIndex - 1, indexMap); node->rchild = buildTree(preorder, inorder, inIndex + 1, inEnd, indexMap); return node; } // 后序遍历打印二叉树 void postOrder(BiNode* root) { if (root == nullptr) { return; } postOrder(root->lchild); postOrder(root->rchild); cout << root->data << " "; } int main() { string preorder = "ABCDEFG"; string inorder = "CEDFBAH"; // 使用哈希表快速查找中序遍历中的节点位置 unordered_map<char, int> indexMap; for (int i = 0; i < inorder.size(); ++i) { indexMap[inorder[i]] = i; } // 构建二叉树 BiNode* root = buildTree(preorder, inorder, 0, inorder.size() - 1, indexMap); // 打印后序遍历结果 cout << "Postorder traversal: "; postOrder(root); cout << endl; return 0; } ``` ### 时间与空间复杂度分析 - **时间复杂度**:`O(n)`,其中 `n` 是节点数量。每个节点仅处理一次。 - **空间复杂度**:`O(n)`,递归调用栈的深度和哈希表的空间。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值