【每日力扣】 修剪二叉搜索树与复原 IP 地址

🔥 个人主页: 黑洞晓威

😀你不必等到非常厉害,才敢开始,你需要开始,才会变的非常厉害。

669. 修剪二叉搜索树

给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案

所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。

解决思路

  1. 如果当前节点为空,则直接返回空节点。
  2. 如果当前节点值小于最小边界,则修剪掉当前节点的左子树,并递归处理右子树。
  3. 如果当前节点值大于最大边界,则修剪掉当前节点的右子树,并递归处理左子树。
  4. 如果当前节点值在范围内,则修剪左右子树,并保持当前节点不变。

代码

java 复制代码
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int val) {
        this.val = val;
    }
}

public class TrimBST {

    public TreeNode trimBST(TreeNode root, int low, int high) {
        if (root == null) {
            return null;
        }

        if (root.val < low) {
            // 如果根节点值小于最小边界,则修剪掉左子树,并递归处理右子树
            return trimBST(root.right, low, high);
        } else if (root.val > high) {
            // 如果根节点值大于最大边界,则修剪掉右子树,并递归处理左子树
            return trimBST(root.left, low, high);
        } else {
            // 根节点值在边界内,则修剪左右子树,并保持根节点不变
            root.left = trimBST(root.left, low, high);
            root.right = trimBST(root.right, low, high);
            return root;
        }
    }

    public static void main(String[] args) {
        TreeNode root = new TreeNode(3);
        root.left = new TreeNode(0);
        root.right = new TreeNode(4);
        root.left.right = new TreeNode(2);
        root.left.right.left = new TreeNode(1);
        int low = 1;
        int high = 3;

        TrimBST solution = new TrimBST();
        TreeNode result = solution.trimBST(root, low, high);
        // 输出结果
        System.out.println(result);
    }
}

复原 IP 地址

有效 IP 地址 正好由四个整数(每个整数位于 0255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。

  • 例如:"0.1.2.201" "192.168.1.1"有效 IP 地址,但是 "0.011.255.245""192.168.1.312""192.168@1.1"无效 IP 地址。

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址 ,这些地址可以通过在 s 中插入 '.' 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

解决思路

对于这个问题,我们可以使用回溯算法来生成所有可能的 IP 地址。具体步骤如下:

  1. 创建一个结果列表,用于存储所有有效的 IP 地址。
  2. 开始回溯搜索,遍历可能的 IP 地址格式。
  3. 在每一步中,判断当前的子串是否是合法的 IP 地址段(在 0 到 255 之间,且不能含有前导 0)。
  4. 如果满足条件,则继续递归搜索下一段 IP 地址。
  5. 如果四段 IP 地址都满足条件,并且已经遍历完整个字符串 s,则将当前的 IP 地址添加到结果列表中。

代码

java 复制代码
import java.util.ArrayList;
import java.util.List;

public class RestoreIPAddress {

    public List<String> restoreIpAddresses(String s) {
        List<String> result = new ArrayList<>();
        backtrack(s, 0, new ArrayList<>(), result);
        return result;
    }

    private void backtrack(String s, int start, List<String> path, List<String> result) {
        if (path.size() == 4 && start == s.length()) {
            result.add(String.join(".", path));
            return;
        }

        for (int i = 1; i <= 3; i++) {
            if (start + i > s.length()) {
                break;
            }

            String segment = s.substring(start, start + i);
            if (isValid(segment)) {
                path.add(segment);
                backtrack(s, start + i, path, result);
                path.remove(path.size() - 1);
            }
        }
    }

    private boolean isValid(String segment) {
        if (segment.length() > 1 && segment.charAt(0) == '0') {
            return false; // 不允许前导 0
        }
        int num = Integer.parseInt(segment);
        return num >= 0 && num <= 255;
    }

    public static void main(String[] args) {
        String s = "25525511135";
        RestoreIPAddress solution = new RestoreIPAddress();
        List<String> result = solution.restoreIpAddresses(s);
        System.out.println(result); // 输出 ["255.255.11.135","255.255.111.35"]
    }
}
相关推荐
界面开发小八哥6 分钟前
「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)
java·ide·java-ee·myeclipse
idolyXyz32 分钟前
[java: Cleaner]-一文述之
java
一碗谦谦粉43 分钟前
Maven 依赖调解的两大原则
java·maven
netyeaxi1 小时前
Java:使用spring-boot + mybatis如何打印SQL日志?
java·spring·mybatis
收破烂的小熊猫~1 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
猴哥源码2 小时前
基于Java+SpringBoot的动物领养平台
java·spring boot
老任与码2 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
小兵张健2 小时前
武汉拿下 23k offer 经历
java·面试·ai编程
FreeBuf_2 小时前
Apache组件遭大规模攻击:Tomcat与Camel高危RCE漏洞引发数千次利用尝试
java·tomcat·apache
无妄-20242 小时前
软件架构升级中的“隐形地雷”:版本选型与依赖链风险
java·服务器·网络·经验分享