当前位置:首页 > 工具 > 正文内容

二叉树基础算法:最大二叉树构建、合并与搜索验证

访客 工具 2026年7月8日 2

654. 最大二叉树

题目来源:LeetCode 654

通过递归方法构建二叉树,每次在指定区间内找到最大值作为根节点,然后递归构建左右子树。

时间复杂度: O(n²)(最坏情况下)
空间复杂度: O(n)

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

    private TreeNode buildMaxTree(int[] arr, int l, int r) {
        if (l > r) return null;
        int maxPos = findMaxIndex(arr, l, r);
        TreeNode node = new TreeNode(arr[maxPos]);
        node.left = buildMaxTree(arr, l, maxPos - 1);
        node.right = buildMaxTree(arr, maxPos + 1, r);
        return node;
    }

    private int findMaxIndex(int[] arr, int start, int end) {
        int idx = start;
        for (int i = start + 1; i <= end; i++) {
            if (arr[i] > arr[idx]) idx = i;
        }
        return idx;
    }
}

617. 合并二叉树

题目来源:LeetCode 617

递归合并两棵二叉树,对应节点值相加。如果某棵树的节点为空,则直接返回另一棵树的节点。

时间复杂度: O(min(m, n))
空间复杂度: O(min(m, n))

class Solution {
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        if (t1 == null && t2 == null) return null;
        if (t1 == null) return t2;
        if (t2 == null) return t1;
        
        TreeNode merged = new TreeNode(t1.val + t2.val);
        merged.left = mergeTrees(t1.left, t2.left);
        merged.right = mergeTrees(t1.right, t2.right);
        return merged;
    }
}

注意:上述代码进行了简化,原递归逻辑通过条件判断提前返回,减少了嵌套分支。

700. 二叉搜索树中的搜索

题目来源:LeetCode 700

利用二叉搜索树性质,通过比较节点值与目标值实现二分查找。

时间复杂度: O(h),h为树高
空间复杂度: O(h)

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if (root == null || root.val == val) return root;
        if (val < root.val) return searchBST(root.left, val);
        return searchBST(root.right, val);
    }
}

98. 验证二叉搜索树

题目来源:LeetCode 98

利用中序遍历得到递增序列的特性进行验证。以下为两种实现方式:

方法一:全局变量标记

class Solution {
    private TreeNode prev;
    private boolean valid;

    public boolean isValidBST(TreeNode root) {
        prev = null;
        valid = true;
        inorderCheck(root);
        return valid;
    }

    private void inorderCheck(TreeNode node) {
        if (node == null || !valid) return;
        inorderCheck(node.left);
        if (prev != null && node.val <= prev.val) {
            valid = false;
            return;
        }
        prev = node;
        inorderCheck(node.right);
    }
}

方法二:递归直接返回结果

class Solution {
    private TreeNode previous;

    public boolean isValidBST(TreeNode root) {
        previous = null;
        return validateTree(root);
    }

    private boolean validateTree(TreeNode node) {
        if (node == null) return true;
        if (!validateTree(node.left)) return false;
        if (previous != null && node.val <= previous.val) return false;
        previous = node;
        return validateTree(node.right);
    }
}

两种方法核心思想相同,均通过中序遍历比较前后节点值。方法一通过全局布尔变量控制,方法二则直接通过递归返回值判断。

相关文章

Trojan服务器搭建与配置

一、整体架构(先对齐认知)Clash Meta (PC / iOS / Android)        ↓ TLS   Trojan Server (443)        ↓     InternetTrojan 的核心是: TLS + HTTPS 流量伪装 看起来像正常网站 非常适合...

Tailscale 的详细用法

Tailscale 是一种基于 WireGuard 协议 的 零配置 VPN(虚拟私有网络)服务,让设备之间能够 安全、加密地直接连接,就像它们在同一个本地网络一样。它的核心特点是 简单、安全、跨平台。Tailscale 非常适合 没有公网 IP、两台电脑不在同一局域网 的场景。 简单来说,Tailscale 是什么?Tailscale 是一款让你的各种设备(电脑、服务器、手机...

Clash Tun 模式 导致 爱快(iKuai SD-Wan)内网域名无法访问

一、Clash  DNS 配置dns:  enable: true  listen: 0.0.0.0:53  ipv6: true  enhanced-mode: redir-host  nameserver:    - 223.5.5.5    - 223.6.6.6iKuai 内网域名 ...

深入解析Node.js运行环境与异步I/O架构

深入解析Node.js运行环境与异步I/O架构

核心定义与价值Node.js本质上是一个JavaScript运行环境,而非编程语言或应用框架。它赋予了JavaScript脱离浏览器在服务端、命令行工具及网络应用中执行的能力。其核心意义在于:用单一语言打通前后端开发壁垒。基于事件驱动与非阻塞I/O的架构特性,Node.js在处理API网关、实时通信及微服务等I/O密集型场景时表现卓越,已成为现代后端工程的主流选择。浏览器沙箱限制1995年Java...

ADO.NET SQL参数化查询的最佳实践

在 ADO.NET 中执行 SQL 查询时,参数化查询是一种关键的安全措施和性能优化手段。它通过将 SQL 命令和用户提供的数据分开处理,有效防止了 SQL 注入攻击,并有助于数据库缓存执行计划。下面总结了几种常用的参数化查询方式。 1. 使用 SqlParameter 对象(推荐) 这是最推荐的参数化查询方式。通过显式创建 SqlParameter 对象,您可以精确控制参数的类...

基于ELK的日志集中化分析系统搭建

构建统一日志管理平台的必要性 在分布式架构中,各服务节点独立运行,日志分散存储于不同主机。传统通过命令行工具如grep、awk逐个检索日志的方式,在数据量庞大时效率极低,难以实现快速定位问题。为提升运维效率,需建立集中式日志处理体系,具备日志采集、传输、存储、分析与告警能力。 ELK技术栈核心组件解析 Elasticsearch:分布式搜索引擎,支持全文检索、实时数据分析和高可用集群部署,...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。