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

算法训练(leetcode)二刷第十五天 | 654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树

刷题记录

  • 654. 最大二叉树
  • 617. 合并二叉树
  • 700. 二叉搜索树中的搜索
  • 98. 验证二叉搜索树
    • 写法一
    • 写法二

654. 最大二叉树

leetcode题目地址

递归建树。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// java
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode buildTree(int[] nums, int left, int right){
    	// 左右闭区间
        if(right<left) return null;
        int maxIdx = left;
        for(int i=left+1; i<=right; i++){
            if(nums[i]>nums[maxIdx]) maxIdx=i;
        }
        TreeNode root = new TreeNode(nums[maxIdx]);
        root.left = buildTree(nums, left, maxIdx-1);
        root.right = buildTree(nums, maxIdx+1, right);
        return root;

    }
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        return buildTree(nums, 0, nums.length-1);
    }
}

617. 合并二叉树

leetcode题目地址

同上题,递归建树。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// java
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode getResultTree(TreeNode root1, TreeNode root2) {
        
        if(root1 == null && root2 == null) return null;
        TreeNode node = new TreeNode();
        // 左空右不空
        if(root1 == null) {
            node.val = root2.val;
            node.left = getResultTree(root1, root2.left);
            node.right = getResultTree(root1, root2.right);
            return node;
        } else if(root2 == null) {
             // 左不空右空
            node.val = root1.val;
            node.left = getResultTree(root1.left, root2);
            node.right = getResultTree(root1.right, root2);
            return node; 
        }else{
            node.val = root1.val + root2.val;
            node.left = getResultTree(root1.left, root2.left);
            node.right = getResultTree(root1.right, root2.right);
            return node; 
        }
        
    }
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        return getResultTree(root1, root2);
    }
}

700. 二叉搜索树中的搜索

leetcode题目地址

二叉搜索树中进行搜索就是一个二分查找的过程。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// java
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    

    public TreeNode searchBST(TreeNode root, int val) {
        if(root == null) return null;
        if(root.val == val){
            return root;
        }    
        if(root.val > val) return searchBST(root.left, val);
        return searchBST(root.right, val);
    }
}

98. 验证二叉搜索树

leetcode题目地址

二叉搜索树的中序遍历序列是单调递增的,因此借助中序遍历,若出现后一个元素小于前一个元素则为false。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

写法一

// java
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    private TreeNode pre;
    private boolean flag;
    public void inOrder(TreeNode root){
        if(!this.flag) return;
        if(root.left != null) inOrder(root.left);
        if(pre!=null && root.val <= pre.val) flag = false;
        pre = root;
        if(root.right != null) inOrder(root.right);
    }
    public boolean isValidBST(TreeNode root) {
        this.pre = null;
        this.flag = true;
        if(root == null) return true;
        inOrder(root);
        return this.flag;
    }
}

写法二

// java
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    private TreeNode pre;
    public boolean inOrder(TreeNode root){
        if(root == null) return true;
        // 左
        boolean left = inOrder(root.left);
        if(!left) return false;
        // 中
        if(pre != null && root.val<=pre.val) return false;
        pre = root;
        // 右
        boolean right = inOrder(root.right);
        if(!right) return false;

        return true;
    }
    public boolean isValidBST(TreeNode root) {
        this.pre = null;
        if(root == null) return true;
        return inOrder(root);
    }
}


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

相关文章:

  • 中仕公考:上海市25年公务员考试今日报名
  • Python中的SQL数据库管理:SQLAlchemy教程
  • R 数据框
  • Python | Leetcode Python题解之第513题找树左下角的值
  • Oracle 大表添加索引的最佳方式
  • 两个时间戳计算时间差
  • 【hector mapping参数设置】
  • Android开发教程实加载中...动效
  • 使用Docker Swarm进行集群管理
  • Matlab实现鼠群优化算法优化回声状态网络模型 (ROS-ESN)(附源码)
  • 基于IMX6ULL的电子产品量产工具
  • 深度了解flink(八) JobManager(2)initializeServices剖析
  • 29.2 golang实战项目log2metrics架构说明
  • 基于SpringBoot的汽车配件销售管理系统
  • C# 如何处理 WebSocket 连接异常
  • Ubuntu 搭建Yapi服务
  • NLP segment-04-自动摘要 auto-summary java 开源实现
  • 大型商场应急响应:SpringBoot技术实现
  • 关于我的编程语言——C/C++——第三篇
  • 详细分析Pytorch中的transpose基本知识(附Demo)| 对比 permute
  • 论敏捷软件开发方法及其应用
  • [含文档+PPT+源码等]精品基于PHP实现的鲜花批发销售网站的设计与实现
  • centos7 keepalived 安装一共有几种方式?
  • jieba-fenci 05 结巴分词之简单聊一聊
  • 精品网:低时延、高私密性,满足企业多元化需求
  • Vue指令:v-show、v-if