【二叉树】二叉树恢复操作
二叉树的操作(C++实现)
/* Implement the function: inorderTraversal: non-recursive version Test:input P, T->buildTree->get the root-> output */
struct TreeNode { int val; TreeNode* left, *right; TreeNode(int x):val(x),left(NULL), right(NULL) {} };
class Solution { public: vector<int> inorderTraversal(TreeNode* root) { vector<int> result; if (root == NULL) return result; stack<TreeNode*> stk; TreeNode* p = root; while (p || !stk.empty()) { while (p) { stk.push(p); p = p->left; } p = stk.top(); stk.pop(); result.push_back(p->val); p = p->right; } return result; } // the following is used to generate test examples for inorderTraversal TreeNode* buildTree(vector<int> P, vector<int> T) { if (P.size() != T.size()) return NULL; int len = P.size(); TreeNode* root = helper(P, T, 0, len - 1, 0, len - 1); return root; } // This is used for creating a tree by inputting preorder and inorder tree. TreeNode* helper(vector<int>& P, vector<int>& T, int pt, int pd, int st, int ed) { cout << "st ed = " << st << " " << ed << endl; cout << "pt pd = " << pt << " " << pd << endl; if (st > ed) return NULL; TreeNode* root = new TreeNode(0); int val = P[pt], len = P.size(); for (int i = st; i <= ed; i++) { if (T[i] == val) { root->left = helper(P, T, pt + 1, pt + i - st, st, i - 1); root->val = val; root->right = helper(P, T, pt + i - st + 1, pd, i + 1, ed); break; } } return root; } };
测试
int main() { int n; int t; while (cin >> n) { TreeNode* root = new TreeNode(0); Solution sol; Solution2 sol2; TreeNode* tree = root; vector<int> inorder(n, 0), preorder(n, 0); for (int i = 0; i < n; i++) { cin >> preorder[i]; } for (int i = 0; i < n; i++) { cin >> inorder[i]; } TreeNode* root2 = sol2.buildTree(preorder, inorder); vector<int> res = sol2.inorderTraversal(root2); for (int i = 0; i < res.size(); i++) { cout << res[i] << " "; } cout << endl; } return 0; } /* Sample Input: 5 2 3 4 7 9 4 3 2 7 9 Sample Output: 4 3 2 7 9 */
分类:
C++基础知识
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通