二刷代码随想录第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;
    }
};

层序遍历刷题

相关推荐
小白程序员成长日记3 小时前
2025.11.06 力扣每日一题
算法·leetcode
暴风鱼划水3 小时前
算法题(Python)数组篇 | 4.长度最小的子数组
python·算法·力扣
gugugu.3 小时前
算法:二分算法类型题目总结---(含二分模版)
算法
大G的笔记本3 小时前
算法篇常见面试题清单
java·算法·排序算法
7澄14 小时前
深入解析 LeetCode 数组经典问题:删除每行中的最大值与找出峰值
java·开发语言·算法·leetcode·intellij idea
AI科技星4 小时前
宇宙的几何诗篇:当空间本身成为运动的主角
数据结构·人工智能·经验分享·算法·计算机视觉
前端小L4 小时前
二分查找专题(二):lower_bound 的首秀——精解「搜索插入位置」
数据结构·算法
老黄编程4 小时前
三维空间圆柱方程
算法·几何
xier_ran5 小时前
关键词解释:DAG 系统(Directed Acyclic Graph,有向无环图)
python·算法
CAU界编程小白5 小时前
数据结构系列之十大排序算法
数据结构·c++·算法·排序算法