leetcode[96] Binary Tree Inorder Traversal
给定树根root。实现中序遍历,也就是左根右。
用递归的话,很简单,左边的返回值加上root的再加上右边的就行。
我自己写的有点挫:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> inorderTraversal(TreeNode *root) { vector<int> lf, ri, ans; if (root == NULL) return ans; lf = inorderTraversal(root -> left); ri = inorderTraversal(root -> right); lf.push_back(root -> val); for (int i = 0; i < ri.size(); ++i) { lf.push_back(ri[i]); } return lf; } };
其实可以写简单一些:
class Solution { public: vector<int> inorderTraversal(TreeNode *root) { vector<int> vi; inHelper(root, vi); return vi; } void inHelper(TreeNode *node, vector<int>& vi) { if(node == nullptr) return; inHelper(node->left, vi); vi.push_back(node->val); inHelper(node->right, vi); } };
题目要求如果不用递归的话,用如下leetcode上的,利用栈,很妙。
vector<int> inorderTraversal(TreeNode *root) { vector<int> rs; if (!root) return rs; stack<TreeNode *> stk; TreeNode *p = root; while (!stk.empty() || p) { if (p) { stk.push(p); p = p->left; } else { p = stk.top(); stk.pop(); rs.push_back(p->val); p = p->right; } } return rs; }
2014-12-13
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> inorderTraversal(TreeNode *root) { vector<int> perm; if (root == NULL) return perm; stack<TreeNode *> sta; TreeNode *p = root; while(!sta.empty() || p) { while (p) { sta.push(p); p = p -> left; } if (!sta.empty()) { p = sta.top(); sta.pop(); perm.push_back(p -> val); p = p -> right; } } return perm; } };
分类:
LeetCode
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 2025成都.NET开发者Connect圆满结束