C++非递归遍历二叉树
C++非递归前序遍历
/** * struct TreeNode { * int val; * struct TreeNode *left;\images\20211111\392807_1636599059575\FE67E09E9BA5661A7AB9DF9638FB1FAC * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型vector */ vector<int> preorderTraversal(TreeNode* root) { // write code here vector<int> listVal; stack<TreeNode*> treeStack; if(root == NULL) return listVal; treeStack.push(root); while(!treeStack.empty()){ TreeNode *p = treeStack.top(); treeStack.pop(); listVal.push_back(p->val); cout<<p->val<<endl; //因为入栈的原因所以要右孩子先出战 if(p->right != NULL){ treeStack.push(p->right); } if(p->left != NULL){ treeStack.push(p->left); } } return listVal; } };
C++非递归中序遍历
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型vector */ vector<int> inorderTraversal(TreeNode* root) { // write code here vector<int> listVal; stack<TreeNode*> treeStack; if(root == NULL) return listVal; treeStack.push(root); TreeNode *p = root; while(!treeStack.empty()){ if(p->left == NULL){ p = treeStack.top(); //cout<<p->val<<endl; listVal.push_back(p->val); treeStack.pop(); p = p->right;
//当右孩子为NULL寻找上一级的右孩子 while(!treeStack.empty() && p == NULL){ p = treeStack.top(); //cout<<p->val<<endl; listVal.push_back(p->val); treeStack.pop(); p = p->right; } if(p != NULL) treeStack.push(p); else continue; } if(p->left != NULL){ p = p->left; treeStack.push(p); } } return listVal; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!