代码随想录day16

搜索,双指针,采取两个指针遍历,采用前中右

复制代码
class Solution {
private:
int result = INT_MAX;
TreeNode* pre = NULL;
void traversal(TreeNode* cur) {
    if (cur == NULL) return;
    traversal(cur->left);   // 左
    if (pre != NULL){       // 中
        result = min(result, cur->val - pre->val);
    }
    pre = cur; // 记录前一个
    traversal(cur->right);  // 右
}
public:
    int getMinimumDifference(TreeNode* root) {
        traversal(root);
        return result;
    }
};

二叉树搜索树,统计众数

依旧是前序遍历,采用双指针的办法,但是要注意相同的情况,要放在前面

复制代码
/**
 * 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* pre=NULL;
    vector<int> res;
    int count=0;
    int maxcount=INT_MIN;
    void traversal(TreeNode* cur){
        if(cur==NULL) return;
        traversal(cur->left);
    
       //第一个元素
        if(pre==NULL)   {count=1;} 
        else if(pre->val==cur->val) {count++;}
        else {count=1;} 
        if(count==maxcount){
            res.push_back(cur->val);
         }
        if(count>maxcount){
            maxcount=count;
            res.clear();
            res.push_back(cur->val);
        }
       
         
        pre=cur;

        traversal(cur->right);

    }
    vector<int> findMode(TreeNode* root) {
        traversal(root);
        return res;
        
    }
};

二叉树公共祖先,回溯算法,采用后序遍历

复制代码
/**
 * 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==q||root==p||root==NULL) return root;

        TreeNode* left=lowestCommonAncestor(root->left,p,q);
        TreeNode* right=lowestCommonAncestor(root->right,p,q);

        if(left==NULL&&right!=NULL) return right;
        else if(left!=NULL&&right==NULL) return left;
        else if(left!=NULL&&right!=NULL) return root;
        else  {return NULL;}
        
    }
};
相关推荐
拳里剑气4 小时前
C++算法:多源BFS
c++·算法·宽度优先·多源bfs
ysa0510305 小时前
【板子】短序列dp(换成维护更小常数维度的dp)
c++·笔记·算法·板子
shwill1235 小时前
PID 算法(三)--- 增量 PID ↔ 单神经元 PID 等价映射
linux·算法
wabs6666 小时前
关于图论【卡码网110.字符串迁移的思考】
数据结构·算法·图论
hanlin037 小时前
刷题笔记:力扣第242、349题(哈希表)
笔记·算法·leetcode
only-qi8 小时前
大模型Agent面试攻略:落地工程痛点、评估体系与Agentic RAG核心精讲
人工智能·算法·面试·职场和发展·langchain·rag
Gauss松鼠会10 小时前
【GaussDB】GaussDB锁阻塞源头查询
java·开发语言·前端·数据库·算法·gaussdb·经验总结
oier_Asad.Chen10 小时前
【洛谷题解/AcWing题解】洛谷P4011 孤岛营救问题/AcWing1131拯救大兵瑞恩
数据结构·笔记·学习·算法·动态规划·图论·宽度优先
逻辑君10 小时前
基于 A2C 算法的双足机器人行走控制
人工智能·深度学习·算法·机器学习·机器人
冻柠檬飞冰走茶11 小时前
PTA基础编程题目集 7-19 支票面额(C语言实现)
c语言·开发语言·数据结构·算法