当前位置: 首页 > article >正文

hot100---day3

二叉树复习+hot100专题

144. 二叉树的前序遍历 - 力扣(LeetCode)

递归法的前中后序遍历,格式比较一致;

class Solution {
public:
    vector<int>& traversal(TreeNode* root, vector<int>& ans)
    {
        if(root==nullptr) return ans;
        TreeNode* cur =root;
        ans.push_back(cur->val);
        traversal(cur->left, ans);
        traversal(cur->right, ans);
        return ans;
    }
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> ans;
        traversal(root, ans);
        return ans;

    }
};

94. 二叉树的中序遍历 - 力扣(LeetCode)

中序遍历;左中右;

class Solution {
public:
    // void traversal(TreeNode* cur, vector<int>& v)
    // {
    //     if(cur==nullptr) return;
    //     traversal(cur->left,v);
    //     v.push_back(cur->val);
    //     traversal(cur->right,v);
    // }
    void traversal(TreeNode* node, vector<int>& nums)
    {
        if(node==nullptr) return;
        TreeNode* cur = node;
        traversal(cur->left, nums);
        nums.push_back(cur->val);
        traversal(cur->right, nums);
    }
    vector<int> inorderTraversal(TreeNode* root) {
       vector<int> nums;
       traversal(root, nums);
       return nums;
    }
};

145. 二叉树的后序遍历 - 力扣(LeetCode)

class Solution {
public:
    void traversal(TreeNode* node, vector<int>& ans)
    {
        if(node==nullptr) return;
        traversal(node->left, ans);
        traversal(node->right, ans);
        ans.push_back(node->val);
    }
    vector<int> postorderTraversal(TreeNode* root) {
        vector<int> ans;
        traversal(root, ans);
        return ans;
    }
};

递归法:

前序遍历;

思路:利用数据结构栈来实现,前序,中左右,所以碰到的栈顶元素就需要push_back到数组中去;然后对于左右节点,是右节点先进入,然后左节点,这样弹出的时候才是左节点先弹出,然后右节点弹出;

class Solution {
public:

    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> ans;
        if(root==nullptr) return ans;
        stack<TreeNode*> st;
        st.push(root);
        while(!st.empty())
        {
            auto tmp = st.top();
            st.pop();
            ans.push_back(tmp->val);
            if(tmp->right) st.push(tmp->right);
            if(tmp->left) st.push(tmp->left);
        }
        return ans;

    }
};


http://www.kler.cn/a/560030.html

相关文章:

  • 一、C#基础入门课程【学习20天】01-07
  • 企业数据分析-投资回报能力分析ROE核心指标
  • 基于Qlearning强化学习的2DoF机械臂运动控制系统matlab仿真
  • 在使用ragflow时docker desktop出现内存不足的问题
  • sailwind 安装提示找不到mfc140.dll安装Visual C++ Redistributable for Visual Studio 2015
  • 【SQLI】sqlmap测试过滤规则和tamper有效性的方法
  • 《Netty 基础:构建高性能网络应用的基石》
  • 华山论剑之JAVA中的“方法论”
  • 嵌入式学习第二十一天--线程
  • 基于CNN的FashionMNIST数据集识别3——模型验证
  • Java多线程与高并发专题——深入synchronized
  • PythonWeb开发框架—Django之DRF框架的使用详解
  • ai-1、人工智能概念与学习方向
  • 商业化运作的“日记”
  • system运行进程以及应用场景
  • 【Python爬虫(61)】Python金融数据挖掘之旅:从爬取到预测
  • 【odoo18-文件管理】在uniapp上访问odoo系统上的图片
  • 第二个接口-分页查询
  • 网站快速收录:如何优化网站图片Alt标签?
  • 如何安装vm和centos