首页 > 编程语言 >代码随想录算法训练营第14天

代码随想录算法训练营第14天

时间:2023-01-10 17:01:59浏览次数:51  
标签:node cur 训练营 随想录 st result push 节点 14

今日开始二叉树部分,先看了理论基础,刷题3道:递归遍历,迭代遍历, 统一迭代。

●  递归遍历

题目链接/文章讲解/视频讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html

class Solution {
public:
    void traversal(TreeNode* cur, vector<int>& vec) {
        if (cur == NULL) return;
        vec.push_back(cur->val);    // 中
        traversal(cur->left, vec);  // 左
        traversal(cur->right, vec); // 右
    }
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> result;
        traversal(root, result);
        return result;
    }
};

●  迭代遍历

题目链接/文章讲解/视频讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8%BF%AD%E4%BB%A3%E9%81%8D%E5%8E%86.html

 

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> result;
        stack<TreeNode*> st;
        TreeNode* cur = root;
        while (cur != NULL || !st.empty()) {
            if (cur != NULL) { // 指针来访问节点,访问到最底层
                st.push(cur); // 将访问的节点放进栈
                cur = cur->left;                // 左
            } else {
                cur = st.top(); // 从栈里弹出的数据,就是要处理的数据(放进result数组里的数据)
                st.pop();
                result.push_back(cur->val);     // 中
                cur = cur->right;               // 右
            }
        }
        return result;
    }
};

●  统一迭代

题目链接/文章讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E7%BB%9F%E4%B8%80%E8%BF%AD%E4%BB%A3%E6%B3%95.html

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> result;
        stack<TreeNode*> st;
        if (root != NULL) st.push(root);
        while (!st.empty()) {
            TreeNode* node = st.top();
            if (node != NULL) {
                st.pop(); // 将该节点弹出,避免重复操作,下面再将右中左节点添加到栈中
                if (node->right) st.push(node->right);  // 添加右节点(空节点不入栈)

                st.push(node);                          // 添加中节点
                st.push(NULL); // 中节点访问过,但是还没有处理,加入空节点做为标记。

                if (node->left) st.push(node->left);    // 添加左节点(空节点不入栈)
            } else { // 只有遇到空节点的时候,才将下一个节点放进结果集
                st.pop();           // 将空节点弹出
                node = st.top();    // 重新取出栈中元素
                st.pop();
                result.push_back(node->val); // 加入到结果集
            }
        }
        return result;
    }
};

标签:node,cur,训练营,随想录,st,result,push,节点,14
From: https://www.cnblogs.com/zzw0612/p/17039651.html

相关文章

  • Educational Codeforces Round 141 (Rated for Div. 2)
    A-MakeitBeautiful题意:给出一个序列a,要求重新排列它,使前\(i-1\)个数之和不等于\(a_i\)思路:数据范围很小。用桶存数字,然后由大到小每种数字为一组循环输出即可赛时......
  • P4503 [CTSC2014] 企鹅 QQ 解题报告
    Desciptoin小Q是PenguinQQ网站的管理员,他最近在进行一项有趣的研究——哪些账户是同一个人注册的。经过长时间的分析,小Q发现同一个人注册的账户名称总是很相似的,例如P......
  • 2023.1.9(Educational Codeforces Round 141 & NEERC2017)
    A.YetAnotherTournamentLinkhttps://codeforces.com/contest/1783/problem/CStatement除了你以外有\(n\)个人,编号为\(0\ton-1\),每个人有两个权值\(a_i\)和......
  • 14个非常棒的 JavaScript 游戏开发框架推荐
     ​​LimeJS​​​​​​这是一个基于HTML5游戏框架,用于快速构建运行于现代触摸屏和桌面浏览器的游戏(需要***访问)。 ​​Impact​​​​​​ 这是一个专业的JavaScript......
  • Educational Codeforces Round 114 D(搜索剪枝)
    D.TheStrongestBuild题目大意:给定n个位置,每个位置有c\({_i}\)个可选能力值(能力值升序给出即a\({_1}\)<a\({_2}\)<a\({_3}\)<...<a\({_{ci}}\)),你可以在每个......
  • calico-v3.14.yaml
    ---#Source:calico/templates/calico-config.yaml#ThisConfigMapisusedtoconfigureaself-hostedCalicoinstallation.kind:ConfigMapapiVersion:v1meta......
  • 代码随想录算法训练营第八天LeetCode28, 459
    代码随想录算法训练营第八天|LeetCode28,459Leetcode28找出字符串中第一个匹配项的下标题目链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence......
  • Educational Codeforces Round 141 (Rated for Div. 2) Different Arrays
    Problem-D-Codeforces题意:给一个长度为n的数组a,下标从2到n-1,每个位置执行一次操作操作:设操作位置为i,$a_{i-1}+=a_i,a_{i+1}-=a_i$,或者$a_{i-1}-=a_i,a_......
  • Educational Codeforces Round 141 (Rated for Div. 2) A-E
    比赛链接A题意给一个数组\(a\),要求重排列以后\(a[i]\neqa[1,i-1]\),其中\(a[1,i-1]\)是前\(i-1\)项和。如果无解则输出NO;否则,给出一个合法的重排列后的\(a......
  • 优秀的工作流引擎144个特点
    作为一名工作流引擎开发者、爱好者、探索者整理优秀的工作流引擎特点,分享给各位,欢迎借鉴、指导、使用驰骋工作流引擎。一般性功能(GeneralFunctions)​1.免程序开发(NoP......