刷算法題:
第一遍: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。