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

力扣--树题总结

783. 二叉搜索树节点最小距离

/**
 * 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 minDiffInBST(TreeNode* root) {
        int ans = INT_MAX, pre = -1;
        dfs(root, pre, ans);
        return ans;
    }

    void dfs(TreeNode* root, int& pre, int& ans){
        //递归返回条件
        if(root == nullptr){
            return;
        }
        //前-一直递归到左下角
        dfs(root->left, pre, ans);
        //中-处理数据,第一次pre保存左下角值
        if(pre == -1){
            pre = root->val;
        }else{
            //递归退回到左下角父节点,ans取最小
            ans = min(ans, root->val - pre);
            //pre更新到当前节点的val
            pre = root->val;
        }
        //后续
        dfs(root->right, pre, ans);
    }
};

872. 叶子相似的树

/**
 * 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 leafSimilar(TreeNode* root1, TreeNode* root2) {
        vector<int> num1;
        vector<int> num2;
        inorder(root1, num1);
        inorder(root2, num2);
        if(num1.size() != num2.size()) return false;
        for(int i=0; i< num1.size(); i++){
            if(num1[i] != num2[i]) return false;
        }
        return true;
    }

    void inorder(TreeNode* root, vector<int>& num){
        if(root==nullptr){
            return;
        }
        inorder(root->left, num);
        if(root->left==nullptr && root->right==nullptr){
            num.push_back(root->val);
        }
        inorder(root->right, num);
    }
};

897. 递增顺序搜索树

/**
 * 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* increasingBST(TreeNode* root) {
        vector<int> res;
        TreeNode* head = new TreeNode();
        TreeNode* p = head;
        dfs(root, res);
        for(int val: res){
            TreeNode* node = new TreeNode(val);
            p->right = node;
            p = p->right;
        }
        return head->right;
    }

    void dfs(TreeNode* root, vector<int>& res){
        if(root == nullptr){
            return;
        }
        dfs(root->left, res);
        res.push_back(root->val);
        dfs(root->right, res);
    }
};

 


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

相关文章:

  • C语言入门到精通(第六版)——第十六章
  • 三、损失函数
  • 2024年11月12日Github流行趋势
  • win11 新建一个批处理,双击查看本机的IP地址
  • 优化时钟网络之时钟抖动
  • C语言 | Leetcode C语言题解之第557题反转字符串中的单词III
  • sql文件
  • UniApp 应用、页面与组件的生命周期详解
  • Codeforces Round 984 (Div. 3)
  • 【Ubuntu pip安装mpi4py时报错】
  • 基于单片机的客车载客状况自动检测系统(论文+源码)
  • 从0开始深度学习(29)——文本预处理
  • golang通用后台管理系统08(菜单路由数据vue对接)
  • 科技查新小知识
  • 算法求解 -- (炼码 3854 题)计算满足条件的好二进制字符串数量
  • 基于SSM(Spring + Spring MVC + MyBatis)框架开发的电能计量与客服服务管理系统
  • 蓝队基础1
  • curl 安装最新版
  • 在 Spring Boot 中实时监控 Redis 命令流
  • 基于Java高校排课系统
  • Thread类及常见方法
  • 【Qt】在 Qt Creator 中使用图片资源方法(含素材网站推荐)
  • 实现API接口的自动化
  • PostgreSQL 开启密码验证插件
  • Spring-Webflux + Reactor + Netty 初体验
  • LeetCode【0017】电话号码的字母组合