LeetCode Hot 100:二叉树

RK3568平台(KBuild篇)KBuild编译体系 从Linux内核2.6开始,Linux内核的编译采用Kbuild系统,这和过去的编译系统有很大的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:首先编译系统会读取Linux内核顶层的Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。kbuild,即 kernel build,用于编译 Linux 内核文件。 阅读详情

LeetCode Hot 100:二叉树

94. 二叉树的中序遍历

思路 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 {
private:
    vector<int> ans;

public:
    vector<int> inorderTraversal(TreeNode* root) {
        helper(root);
        return ans;
    }
    void helper(TreeNode* root) {
        if (root == nullptr)
            return;

        helper(root->left);
        ans.push_back(root->val);
        helper(root->right);
    }
};

104. 二叉树的最大深度

思路 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:
    int maxDepth(TreeNode* root) {
        return root ? max(maxDepth(root->left), maxDepth(root->right)) + 1 : 0;
    }
};

思路 2:层序遍历

/**
 * 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:
    int maxDepth(TreeNode* root) {
        if (root == nullptr)
            return 0;

        queue<TreeNode*> q;
        q.push(root);
        int depth = 0;
        while (!q.empty()) {
            int sz = q.size();
            for (int i = 0; i < sz; i++) {
                TreeNode* node = q.front();
                q.pop();
                if (node->left)
                    q.push(node->left);
                if (node->right)
                    q.push(node->right);
            }
            depth++;
        }
        return depth;
    }
};

226. 翻转二叉树

思路 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:
    TreeNode* invertTree(TreeNode* root) {
        if (root == nullptr)
            return root;

        swap(root->left, root->right);
        invertTree(root->left);
        invertTree(root->right);
        return root;
    }
};

思路 2:自顶向下递归

/**
 * 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:
    TreeNode* invertTree(TreeNode* root) {
        if (root == nullptr)
            return root;

        TreeNode* l = invertTree(root->left);
        TreeNode* r = invertTree(root->right);
        root->left = r;
        root->right = l;

        return root;
    }
};

101. 对称二叉树

思路 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:
    bool isSymmetric(TreeNode* root) {
        return isSymmetric(root->left, root->right);
    }
    bool isSymmetric(TreeNode* left, TreeNode* right) {
        if (left == nullptr && right == nullptr)
            return true;
        if ((left && right == nullptr) || (left == nullptr && right))
            return false;

        if (left->val != right->val)
            return false;

        return isSymmetric(left->left, right->right) &&
               isSymmetric(left->right, right->left);
    }
};

思路 2:迭代

/**
 * 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:
    bool isSymmetric(TreeNode* root) { return isSymmetric(root, root); }
    bool isSymmetric(TreeNode* u, TreeNode* v) {
        queue<TreeNode*> q;
        q.push(u);
        q.push(v);
        while (!q.empty()) {
            u = q.front();
            q.pop();
            v = q.front();
            q.pop();
            if (u == nullptr && v == nullptr)
                continue;
            if ((u && v == nullptr) || (u == nullptr && v))
                return false;
            if (u->val != v->val)
                return false;

            q.push(u->left);
            q.push(v->right);

            q.push(u->right);
            q.push(v->left);
        }

        return true;
    }
};

543. 二叉树的直径

思路 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:
    int diameterOfBinaryTree(TreeNode* root) {
        int ans = 0;

        function<int(TreeNode*)> dfs = [&](TreeNode* root) {
            if (root == nullptr)
                return 0;

            int left = dfs(root->left);
            int right = dfs(root->right);
            ans = max(ans, left + right + 1);
            return max(left, right) + 1;
        };

        dfs(root);

        return ans - 1;
    }
};

102. 二叉树的层序遍历

/**
 * 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<vector<int>> levelOrder(TreeNode* root) {
        if (root == nullptr)
            return {};

        queue<TreeNode*> q;
        q.push(root);
        vector<vector<int>> ans;
        while (!q.empty()) {
            int sz = q.size();
            vector<int> v;
            for (int i = 0; i < sz; i++) {
                TreeNode* node = q.front();
                q.pop();
                v.push_back(node->val);
                if (node->left)
                    q.push(node->left);
                if (node->right)
                    q.push(node->right);
            }
            ans.push_back(v);
        }
        return ans;
    }
};

108. 将有序数组转换为二叉搜索树

思路 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:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return buildBST(nums, 0, nums.size() - 1);
    }
    TreeNode* buildBST(vector<int>& nums, int start, int end) {
        if (start > end)
            return nullptr;

        int mid = start + (end - start) / 2;
        TreeNode* root = new TreeNode(nums[mid]);
        root->left = buildBST(nums, start, mid - 1);
        root->right = buildBST(nums, mid + 1, end);

        return root;
    }
};

98. 验证二叉搜索树

思路 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:
    bool isValidBST(TreeNode* root) {
        return isValidBST(root, LONG_LONG_MIN, LONG_LONG_MAX);
    }
    bool isValidBST(TreeNode* root, long long lower, long long upper) {
        if (root == nullptr)
            return true;
        if (root->val <= lower)
            return false;
        if (root->val >= upper)
            return false;
        return isValidBST(root->left, lower, root->val) &&
               isValidBST(root->right, root->val, upper);
    }
};

思路 2:中序遍历

/**
 * 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 {
private:
    vector<int> arr;

public:
    bool isValidBST(TreeNode* root) {
        inOrder(root);
        for (int i = 0; i < arr.size() - 1; i++)
            if (arr[i] >= arr[i + 1])
                return false;
        return true;
    }
    void inOrder(TreeNode* root) {
        if (root == nullptr)
            return;

        if (root->left)
            inOrder(root->left);
        arr.push_back(root->val);
        if (root->right)
            inOrder(root->right);
    }
};

230. 二叉搜索树中第 K 小的元素

思路 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 {
private:
    vector<int> arr;

public:
    int kthSmallest(TreeNode* root, int k) {
        inOrder(root);
        
        if (k > arr.size())
            return -1;
        
        return arr[k - 1];
    }
    void inOrder(TreeNode* root) {
        if (root == nullptr)
            return;

        if (root->left)
            inOrder(root->left);
        arr.push_back(root->val);
        if (root->right)
            inOrder(root->right);
    }
};

思路 2:中序遍历

/**
 * 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 {
private:
    int ans = 0;

public:
    int kthSmallest(TreeNode* root, int k) {
        inOrder(root, k);
        return ans;
    }
    // 辅函数 - 中序遍历
    void inOrder(TreeNode* root, int& k) {
        if (root == nullptr)
            return;
        inOrder(root->left, k);
        k--;
        if (k == 0) {
            ans = root->val;
            return;
        }
        if (k > 0)
            inOrder(root->right, k);
    }
};

199. 二叉树的右视图

思路 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> rightSideView(TreeNode* root) {
        if (root == nullptr)
            return {};

        queue<TreeNode*> q;
        q.push(root);
        vector<int> ans;
        while (!q.empty()) {
            int sz = q.size();
            vector<int> v;
            for (int i = 0; i < sz; i++) {
                TreeNode* node = q.front();
                q.pop();
                v.push_back(node->val);
                if (node->left)
                    q.push(node->left);
                if (node->right)
                    q.push(node->right);
            }
            ans.push_back(v.back());
        }
        return ans;
    }
};

114. 二叉树展开为链表

思路 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 {
private:
    vector<int> arr;

public:
    void flatten(TreeNode* root) {
        if (root == nullptr)
            return;
        if (root->left == nullptr && root->right == nullptr)
            return;

        preOrder(root);
        root->left = nullptr;
        root->right = nullptr;
        TreeNode* p = root;
        for (int i = 1; i < arr.size(); i++) {
            TreeNode* node = new TreeNode(arr[i]);
            p->right = node;
            p = p->right;
        }
    }
    void preOrder(TreeNode* root) {
        if (root == nullptr)
            return;

        arr.push_back(root->val);
        if (root->left)
            preOrder(root->left);
        if (root->right)
            preOrder(root->right);
    }
};

105. 从前序与中序遍历序列构造二叉树

思路 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
{
private:
    unordered_map<int, int> index;

public:
    // 主函数
    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder)
    {
        int n = preorder.size();
        // 构造哈希映射,帮助我们快速定位根节点
        for (int i = 0; i < n; i++)
            index[inorder[i]] = i;
        return buildTree(preorder, inorder, 0, n - 1, 0, n - 1);
    }
    // 辅函数
    TreeNode *buildTree(const vector<int> &preorder, const vector<int> &inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right)
    {
        if (preorder_left > preorder_right)
            return nullptr;
        // 前序遍历中的第一个节点就是根节点
        int preorder_root = preorder_left;
        // 在中序遍历中定位根节点
        int inorder_root = index[preorder[preorder_root]];
        // 先把根节点建立出来
        TreeNode *root = new TreeNode(preorder[preorder_root]);
        // 得到左子树中的节点数目
        int size_left_subtree = inorder_root - inorder_left;
        // 递归地构造左子树,并连接到根节点
        // 先序遍历中「从 左边界+1 开始的 size_left_subtree」个元素就对应了中序遍历中「从 左边界 开始到 根节点定位-1」的元素
        root->left = buildTree(preorder, inorder, preorder_left + 1, preorder_left + size_left_subtree, inorder_left, inorder_root - 1);
        // 递归地构造右子树,并连接到根节点
        // 先序遍历中「从 左边界+1+左子树节点数目 开始到 右边界」的元素就对应了中序遍历中「从 根节点定位+1 到 右边界」的元素
        root->right = buildTree(preorder, inorder, preorder_left + size_left_subtree + 1, preorder_right, inorder_root + 1, inorder_right);
        return root;
    }
};

437. 路径总和 III

思路 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:
    int pathSum(TreeNode* root, int targetSum) {
        if (root == nullptr)
            return 0;

        int res = path_sum(root, targetSum);
        res += pathSum(root->left, targetSum);
        res += pathSum(root->right, targetSum);

        return res;
    }
    long long path_sum(TreeNode* root, long long target) {
        if (root == nullptr)
            return 0LL;

        long long count = root->val == target ? 1LL : 0LL;
        target -= root->val;
        count += path_sum(root->left, target);
        count += path_sum(root->right, target);

        return count;
    }
};

思路 2:回溯 + 哈希表

/**
 * 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 {
private:
    unordered_map<long long, int> prefix; // <总和,次数>

public:
    int pathSum(TreeNode* root, int targetSum) {
        prefix[0] = 1; // 初始化
        return backtrack(root, 0LL, targetSum);
    }
    // 辅函数
    int backtrack(TreeNode* root, long long cur, int target) {
        if (root == nullptr)
            return 0;

        int res = 0;
        cur += root->val;
        if (prefix.count(cur - target))
            res += prefix[cur - target];
        prefix[cur]++; // 修改当前节点状态
        // 递归子节点
        res += backtrack(root->left, cur, target);
        res += backtrack(root->right, cur, target);
        prefix[cur]--; // 回改当前节点状态
        
        return res;
    }
};

236. 二叉树的最近公共祖先

思路 1:递归

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (root == nullptr)
            return nullptr;
        // p 和 q 其中有一个正好是 root,直接返回 root
        if (root == p || root == q)
            return root;
        // 通过递归,得到左右两棵子树的值
        TreeNode* leftLCA = lowestCommonAncestor(root->left, p, q);
        TreeNode* rightLCA = lowestCommonAncestor(root->right, p, q);
        // p 和 q 分别在 root 的不同子树,直接返回 root
        if (leftLCA && rightLCA)
            return root;
        // p 和 q 在 root 的同一侧,且 root 不等于 p 或者 q 的任何一个,那么就找 p 和 q 在的那一侧子树
        return leftLCA == nullptr ? rightLCA : leftLCA;
    }
};

124. 二叉树中的最大路径和

思路 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:
    int maxPathSum(TreeNode* root) {
        int ans = INT_MIN;

        function<int(TreeNode*)> dfs = [&](TreeNode* root) -> int {
            if (root == nullptr)
                return 0;

            int left = dfs(root->left);
            int right = dfs(root->right);
            int sum = root->val + left + right;
            ans = max(ans, sum);

            return max(max(left, right) + root->val, 0);
        };

        dfs(root);

        return ans;
    }
};
YOLOv11改进,YOLOv11添加DCNv4可变性卷积(windows系统成功编译),二次创新C3k2结构,全网最详细教程 引入了可变形卷积 v4 (DCNv4),这是一种为广泛视觉应用设计的高效且有效的操作算子。DCNv4通过两项关键增强解决了其前身DCNv3的局限性:1. 移除空间聚合中的softmax归一化,以增强其动态特性和表达能力;2. 优化内存访问以最小化冗余操作,从而加速计算。这些改进使得DCNv4相比DCNv3显著加快了收敛速度,并且处理速度大幅提升,前向传播速度超过三倍。DCNv4在多个任务中表现出色,包括图像分类、实例和语义分割,特别是在图像生成方面表现突出。 阅读详情

相关推荐

MiniMax H3 + ComfyUI 工作流搭建指南:从整合包到视频生成

AI视频生成正成为内容创作的新基础设施,而ComfyUI作为可视化工作流引擎,将复杂的模型推理过程拆解为节点与连线,让本地视频生成变得可复用、可批量。理解这一原理后,用户无需编写代码,只需掌握模型加载、提示词控制、采样与解码的基本链路,即可搭建出稳定的视频生产管线。MiniMax H3作为前沿视频生成模型,在ComfyUI中通过权重文件和自定义节点落地,配合整合包可大幅降低环境配置门槛。从硬件评估、目录结构到节点连接与参数调优,本文系统性梳理了从零跑通一条视频生成工作流的完整路径,帮助用户在批量素材生成、风

weixin_29057065的博客 414

【LeetCode HOT 100】详细题解之二叉树篇

LeetCode HOT100 详细题解之二叉树【Java实现】

m0_52031708的博客 1700

手把手教你调试RTL8201F:从芯片手册解读到LWIP驱动移植

本文详细解析了RTL8201F PHY芯片的开发流程,从寄存器配置到LWIP驱动移植,重点介绍了RMII模式下的特殊配置要点和调试技巧。通过实战案例和高级调试方法,帮助工程师解决网络性能问题,实现与FreeRTOS+LWIP协议栈的稳定集成。

ik678901234的博客 972

力扣hot100:二叉树

核心思路:递归,递归每个节点左右子树的深度,然后更新最长路径,也就是左右子树深度之和。关于递归用文字很难描述清楚,建议每次做的时候都用笔模拟一次,这样思路更清晰。简单说一下,就是不断向左遍历到最后一个节点,然后更新max(最长路径值),返回当前节点左子树或者右子树的高度,注意是子树!

2401_83606094的博客 168

带挂牵引车前向运动模型推导及仿真实现

牵引车-半挂车的车辆结构与普通的车辆相比增加了一个半挂车,它们之间通过鞍座相连接,为了分析半挂牵引车运动过程中的位姿和状态,本文将基于车辆的机械结构建立对应的运动学模型,该模型基于以下假设: 车辆行驶过程中,道路平坦且无凸凹; 车辆低速行驶,且运行过程中车身无侧倾和俯仰运动; 车辆行驶过程中,轮胎无形变,无侧向滑动,且无侧向力; 牵引车和半挂车均满足阿克曼转向几何原理; 牵引车与半挂车不会发现折叠。

jianmo的博客 3182

IP白名单校验

支持格式: 1、127.0.0.1 // 指定固定IP 2、127.0.0.1-127.0.0.128 // 可使用“-”来表示一个IP区间,支持跨IP段(一般不会出现这种情况,跨IP段则配置多个规则) 3、127.0.* // 2~4位IP段可...

2199

力扣hot100 二叉树的右视图https://leetcode.cn/problems/binary-tree-right-side-view/

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。输入:root = [1,2,3,4,null,null,null,5]输入:root = [1,2,3,null,5,null,4]输入:root = [1,null,3]二叉树的节点个数的范围是 [0,100]输出:[1,3,4,5]输入:root = []输出:[1,3,4]

blxr_的博客 224

解读Autoware.Universe规划模块:Behavior Path Planner

Behavior Path Planner是一个基于行为生成不同形态路径的路径规划器,负责生成 基于交通状况的路径(path), 车辆可以移动的可行驶区域(drivable area)(在路径消息中定义), 将被发送到车辆接口的转向信号(turn signal) 命令。

策 5491

力扣HOT100之二叉树:226. 翻转二叉树

这道题很简单,用递归来做,对于一个根节点来说,有两种情况我们不需要翻转:一是根节点为空,二是根节点为叶子节点。这很容易理解,当传入的节点不满足上面的两种情况时,我们就需要做一个翻转,这里我们需要额外定义一个变量来保存当前节点的左孩子(或右孩子)节点,然后我们将其左右孩子再调用。函数,再进行互换,然后返回根节点即可。

weixin_52151595的博客 364

电源芯片TPS54560典型应用电路及设计详解

TPS54560 是一款配有集成型高侧 MOSFET 的 60V、5A DC-DC转换器,输入电压范围7-60V,输出电压可通过外部反馈电阻设置成略低于输入电压的任意值。**所以,**R5=31.25KΩ、R6:10KΩ(常用值)时,即可设置输出电压为 3.3V。**所以,**R5=140KΩ、R6:10KΩ(常用值)时,即可设置输出电压为12V。设计 TPS54560 的输出电压时,主要通过外部反馈电阻网络来设置输出电压。因此,输出 3.3V ,输入电压24V时推荐的电感值为 8µH 至 10µH。

weixin_42306872的博客 1万+

低功耗设计:rush current

在power gating的设计中引入了一个rush current的概念,它的产生原因是switch cell上电过程相当于电容充电过程,会产生一个短期的大电流,称之为rush current。 1.rush current的危害 1)造成巨大的ir drop 2)导致功能错误 3)一些极端例子中,rush current会引发VDD短期崩溃,造成存储在retention register与mem中的数据失效 4)大电流会还对周围always on模块造成干扰,产生大的压降 2.控制rus

m0_61544122的博客 3071

LeetCode HOT100刷题笔记(七):二叉树

ps:笔记和代码按本人理解整理,重思路

学习记录 987

异构图中的注意力机制网络:节点级别和语义级别的注意力(Python实现)

在本文中,我们介绍了如何使用Python实现异构图中的节点级别注意力和语义级别注意力。通过语义级别注意力,我们可以根据节点的语义信息对节点进行加权聚合。在本文中,我们将介绍如何使用Python实现异构图中的注意力机制网络,包括节点级别的注意力和语义级别的注意力。最后,我们使用注意力权重对节点特征进行加权聚合,得到聚合后的节点表示。然后,将聚合后的节点表示传递给语义级别注意力模型,根据节点的语义信息进行加权聚合,得到最终的表示。函数中,首先使用节点级别注意力模型对节点特征进行聚合,得到聚合后的节点表示。

HackNebulaZ的博客 485

LeetCode 热题 HOT 100:二叉树专题

题目包含:二叉树的中序遍历、二叉树的前序遍历、二叉树的后序遍历、不同的二叉搜索树、验证二叉搜索树、对称二叉树、二叉树的层序遍历、二叉树的最大深度、从前序与中序遍历序列构造二叉树、二叉树展开为链表、二叉树中的最大路径和、翻转二叉树、把二叉搜索树转换为累加树、二叉树的直径、合并二叉树

秀岩的博客 1238

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LeetCode HOT100刷题笔记(六):二叉树

ps:笔记和代码按本人理解整理,重思路

学习记录 1111

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

力扣hot100 二叉树的最近公共祖先https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4。因为根据定义最近公共祖先节点可以为节点本身。输入:root = [1,2], p = 1, q = 2。

blxr_的博客 220

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode Hot100 | Day1 | 二叉树:二叉树的直径

主要学习内容:二叉树深度求法深度的 left+right+1 得到的是从根结点到叶子结点的节点数量。

m0_74795952的博客 792

LeetCode--Hot100:二叉树的公共祖先

如果下面有 q 或者 p,那么当前节点就是最近公共祖先,直接返回当前节点。如果下面没有 q 和 p,那既然都没有要找的节点了,也不需要递归,直接返回当前节点。,返回值可能是最近公共祖先,也可能是空节点(表示子树内没找到任何有用信息)、节点 p 或者节点 q(可能成为最近公共祖先,或者用来。:为什么发现当前节点是 p 或者 q 就不再往下递归了?对于最外层的递归调用者来说,返回值是最近公共祖先的意思。:先探索完所有子节点,再通过返回值判断当前节点是否为公共祖先。上面的某个节点是否为最近公共祖先)。

2401_83386596的博客 867

力扣HOT100之二叉树:114. 二叉树展开为链表

这道题自己尝试着做了一下,感觉还是得用递归来做比较简单,但是一直想的是用前序遍历来构造链表,导致怎么做都不对,去看了下灵神的题解,然后问了下GPT,现在终于弄明白了。虽然构造出来的链表的排列顺序是按照前序遍历来排列的,但是在构造的时候不能用前序遍历,因为按照根 -> 左 -> 右的顺序遍历的话,我们需要将左孩子节点移到右孩子节点处,然后左孩子置空,这样右孩子就直接丢失了,就算我们用一个额外的变量来提前保存右子树也无法解决。处理节点 1 时,将 1 的左子树(2)移到右侧,原右子树(5)丢失。

weixin_52151595的博客 375

力扣HOT100之二叉树:543. 二叉树的直径

既然直径一定会在某个节点拐弯,那我们可以枚举每个点,假设在这个节点拐弯,然后分别计算该节点的左右子树最长链(最大深度)然后+2,就得到了以当前节点为根节点的直径,我们使用一个全局变量来维护二叉树的最大直径,每当计算一个节点为根节点的最大直径时,就进行比较和更新。这里我们递归的作用并不是计算每个节点的直径,而是计算每个节点的左右子树中的最大链长,计算完之后二者相加,再顺带计算出当前节点的直径。

weixin_52151595的博客 368

力扣HOT100之二叉树:199. 二叉树的右视图

这道题没啥好说的,首先定义一个向量来保存每一层的最后一个元素,直接用层序遍历(广度优先搜索)遍历二叉树,然后将每一层的最后一个元素加入到这个向量中即可。属于是二叉树层序遍历的模板题。

weixin_52151595的博客 375

力扣HOT100之二叉树:94. 二叉树的中序遍历

循环不断向左遍历,并将遍历到的节点压入栈中,当遇到空节点时,此时的栈顶元素为空节点的父节点,此时我们再从栈顶的节点出发,对栈顶节点的右孩子进行相同的遍历操作(不断向左遍历),并将遍历到的节点也加入到栈中。当右孩子也为空时,此时栈顶元素为当前节点的祖父节点,同样直接弹出栈顶元素,并将其加入到向量中。这道题用递归很好做,都不知道该怎么描述,这里就直接贴递归代码了,迭代的做法稍微讲一下。感觉二叉树的迭代遍历一定会用到队列或者栈,这里主要用的是栈。我们从根节点出发,用一个。

weixin_52151595的博客 298

力扣hot100——树:二叉树的最大深度

该代码使用递归和动态规划方法计算二叉树的最大深度。通过定义TreeNode结构体表示二叉树节点,Solution类中的maxDepth函数递归地计算左右子树的最大深度,取较大值并加1(当前节点深度)。当节点为空时返回0作为递归终止条件。时间复杂度O(n),空间复杂度O(h),其中n为节点数,h为树高。

weixin_74681777的博客 125

力扣HOT100之二叉树:104. 二叉树的最大深度

这道题没啥好说的,就是简单的层序遍历,用一个二维向量存储整个二叉树的元素,二维向量中的每一个一维向量分别存储每一层的元素,我们用一个二重。循环则将一层的所有元素都添加到一个临时的一维向量中,内层循环结束后再及时将这个临时向量添加到二维向量中。循环来控制添加一维向量,每循环一次就将一层的元素添加到向量中,而内层。循环来实现元素的添加,外层的。

weixin_52151595的博客 274

LeetCode Hot100 | Day3 | 二叉树:翻转二叉树&&对称二叉树

后序遍历交换两个结点就行。

m0_74795952的博客 682

力扣HOT100之二叉树:102. 二叉树的层序遍历

这道题太简单了,相当于基础的模板题,但凡涉及到层序遍历一定会用到队列来实现,其他的倒没啥好说的,用两层。循环结束时,直接将收割的一维向量加入到二维向量即可。直接把这种套路记住就可以了。循环则负责收割每一层的元素,将其加入到一个一维向量中,当内层。循环用于控制访问二叉树的每一层,而内层。循环来层序遍历,外层。

weixin_52151595的博客 459
上一篇: LeetCode Hot 100:子串
下一篇: LeetCode Hot 100:图论
UestcXiye
博客等级 码龄8年 9030粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值