刷算法题:
第一遍:1.看5分钟,没思路看题解
2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。
3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法)
4.整理到自己的自媒体平台。
5.再刷重复的类似的题目,根据时间和任务安排刷哪几个板块
6.用c++语言 都刷过一遍了 就刷中等
一.题目
给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
示例 1:
输入:root = [1,null,2,3] 输出:[1,3,2]
示例 2:
输入:root = [] 输出:[]
示例 3:
输入:root = [1] 输出:[1]
提示:
- 树中节点数目在范围
[0, 100]
内 -100 <= Node.val <= 100
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
二、反思
1.自己的解法
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int> res;inorder(root,res);return res;//没有赋初值,就能直接返回[]}void inorder(TreeNode* root,vector<int>& res){if(!root){return ;}inorder(root->left,res);res.push_back(root->val);inorder(root->right,res);}
};
2.题目的解法
class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {vector<int> res;stack<TreeNode*> stk;while (root != nullptr || !stk.empty()) {while (root != nullptr) {stk.push(root);root = root->left;}root = stk.top();stk.pop();res.push_back(root->val);root = root->right;}return res;}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/binary-tree-inorder-traversal/solutions/412886/er-cha-shu-de-zhong-xu-bian-li-by-leetcode-solutio/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3.思路的异同
三.进步的地方
我觉得刷栈就是再不断熟悉递归的思想,以及栈的思想。
这个题,应该思考最终要执行的步骤是push,问题在于遍历左右节点,然后只要遇到null就要return。