二刷代码随想录第13天

二叉树的递归遍历

  • 递归三部曲
  • 1.确定递归函数的参数和返回值 2.确定终止条件 3.确定单层的递归逻辑
  • 前中后序遍历只需要改一下位置即可
cpp 复制代码
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> vec;
        traversal(root, vec);
        return vec;
    }

    void traversal(TreeNode* cur, vector<int>& vec) {
        if (cur == nullptr) {
            return;
        }
        //前中后序只要改变这里的位置即可
        traversal(cur->left, vec);
        vec.push_back(cur->val);
        traversal(cur->right, vec);
    }
};

二叉树的迭代遍历

  • 利用栈的特性
  • 栈是先进后出,所以遍历左右节点的时候需要反过来
cpp 复制代码
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        stack<TreeNode*> st;
        vector<int> result;
        if (root == nullptr) {
            return result;
        }
        st.push(root);
        while (!st.empty()) {
            TreeNode* cur = st.top();
            if (cur != nullptr) {
            //前中后序只要改变这里的位置即可
                st.pop();
                if (cur->right)
                    st.push(cur->right);
                st.push(cur);
                st.push(nullptr);
                if (cur->left)
                    st.push(cur->left);
            } else {
                st.pop();
                cur = st.top();
                st.pop();
                result.push_back(cur->val);
            }
        }

        return result;
    }
};

二叉树的层序遍历

  • 利用队列的特性
cpp 复制代码
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        queue<TreeNode*> que;
        vector<vector<int>> result;
        if (root == nullptr) {
            return result;
        }
        que.push(root);
        while (!que.empty()) {
            int size = que.size();
            vector<int> vec;
            for (int i = 0; i < size; i++) {
                TreeNode* node = que.front();
                que.pop();
                vec.push_back(node->val);
                if (node->left)
                    que.push(node->left);
                if (node->right)
                    que.push(node->right);
            }
            result.push_back(vec);
        }
        return result;
    }
};

层序遍历刷题

相关推荐
向上的车轮7 分钟前
“傅里叶变换算法”来检测纸箱变形的简单示例
算法
九亿AI算法优化工作室&21 分钟前
乡村地区无人机医药配送路径规划与优化仿真
人工智能·算法·matlab·回归
米粉030536 分钟前
算法图表总结:查找、排序与递归(含 Mermaid 图示)
数据结构·算法·排序算法
人类发明了工具1 小时前
【优化算法】协方差矩阵自适应进化策略(Covariance Matrix Adaptation Evolution Strategy,CMA-ES)
线性代数·算法·矩阵·cma-es
黑色的山岗在沉睡1 小时前
LeetCode100.4 移动零
数据结构·算法·leetcode
方博士AI机器人1 小时前
算法与数据结构 - 二叉树结构入门
数据结构·算法·二叉树
-qOVOp-1 小时前
zst-2001 上午题-历年真题 算法(5个内容)
算法
全栈凯哥2 小时前
Java详解LeetCode 热题 100(17):LeetCode 41. 缺失的第一个正数(First Missing Positive)详解
java·算法·leetcode
ai.Neo2 小时前
牛客网NC22157:牛牛学数列2
数据结构·c++·算法
Nobkins3 小时前
2023CCPC河南省赛暨河南邀请赛个人补题ABEFGHK
开发语言·数据结构·c++·算法·图论