手撕二叉树 非递归 前序中序后序遍历
#include <bits/stdc++.h> using namespace std; struct TreeNode { int val; struct TreeNode* left; struct TreeNode* right; TreeNode(int val) :val(val), left(nullptr), right(nullptr){} }; vector<int> preorder(TreeNode* root) { vector<int> ans; stack<TreeNode*> s; if (root == NULL) return ans; s.push(root); while (!s.empty()) { TreeNode* cur = s.top(); s.pop(); ans.push_back(cur->val); if (cur->right) s.push(cur->right); if (cur->left) s.push(cur->left); } return ans; } vector<int> inorder(TreeNode* root) { vector<int> ans; stack<TreeNode*> s; while (root || !s.empty()) { while (root) { s.push(root); root = root->left; } TreeNode* cur = s.top(); s.pop(); ans.push_back(cur->val); root = cur->right; } return ans; } vector<int> postorder(TreeNode* root) { vector<int> ans; stack<TreeNode*> s; TreeNode* pre = NULL; while (root || !s.empty()) { while (root) { s.push(root); root = root->left; } TreeNode* cur = s.top(); s.pop(); if (cur->right == NULL || cur->right == pre) { ans.push_back(cur->val); pre = cur; } else { s.push(cur); root = cur->right; } } return ans; } int main() { TreeNode* a1 = new TreeNode(1); TreeNode* a2 = new TreeNode(2); TreeNode* a3 = new TreeNode(3); a1->left = a2; a1->right = a3; vector<int> pre = preorder(a1); vector<int> in = inorder(a1); vector<int> post = postorder(a1); for (int i = 0;i < pre.size();i++) cout << pre[i] << " "; cout << endl; for (int i = 0;i < in.size();i++) cout << in[i] << " "; cout << endl; for (int i = 0;i < post.size();i++) cout << post[i] << " "; cout << endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?