Day 23 | 669. Trim a BST | 108. Convert Sorted Array to BST | 538. Convert BST to Greater Tree

LeetCode二叉树问题解决方案集锦,

Day 1 | 704. Binary Search | 27. Remove Element | 35. Search Insert Position | 34. First and Last Position of Element in Sorted Array
Day 2 | 977. Squares of a Sorted Array | 209. Minimum Size Subarray Sum | 59. Spiral Matrix II
Day 3 | 203. Remove Linked List Elements | 707. Design Linked List | 206. Reverse Linked List
Day 4 | 24. Swap Nodes in Pairs| 19. Remove Nth Node From End of List| 160.Intersection of Two Lists
Day 6 | 242. Valid Anagram | 349. Intersection of Two Arrays | 202. Happy Numbe | 1. Two Sum
Day 7 | 454. 4Sum II | 383. Ransom Note | 15. 3Sum | 18. 4Sum
Day 8 | 344. Reverse String | 541. Reverse String II | 替换空格 | 151.Reverse Words in a String | 左旋转字符串
Day 9 | 28. Find the Index of the First Occurrence in a String | 459. Repeated Substring Pattern
Day 10 | 232. Implement Queue using Stacks | 225. Implement Stack using Queue
Day 11 | 20. Valid Parentheses | 1047. Remove All Adjacent Duplicates In String | 150. Evaluate RPN
Day 13 | 239. Sliding Window Maximum | 347. Top K Frequent Elements
Day 14 | 144.Binary Tree Preorder Traversal | 94.Binary Tree Inorder Traversal| 145.Binary Tree Postorder Traversal
Day 15 | 102. Binary Tree Level Order Traversal | 226. Invert Binary Tree | 101. Symmetric Tree
Day 16 | 104.MaximumDepth of BinaryTree| 111.MinimumDepth of BinaryTree| 222.CountComplete TreeNodes
Day 17 | 110. Balanced Binary Tree | 257. Binary Tree Paths | 404. Sum of Left Leaves
Day 18 | 513. Find Bottom Left Tree Value | 112. Path Sum | 105&106. Construct Binary Tree
Day 20 | 654. Maximum Binary Tree | 617. Merge Two Binary Trees | 700.Search in a Binary Search Tree
Day 21 | 530. Minimum Absolute Difference in BST | 501. Find Mode in Binary Search Tree | 236. Lowes
Day 22 | 235. Lowest Common Ancestor of a BST | 701. Insert into a BST | 450. Delete Node in a BST


LeetCode 669. Trim a Binary Search Tree

Question Link

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if(root == null) return null;
        if(root.val < low)
            return trimBST(root.right, low, high);
        if(root.val > high)
            return trimBST(root.left, low, high);
        // The value of root in the range
        root.left = trimBST(root.left, low, high);
        root.right = trimBST(root.right, low, high);
        return root;
    }
}

LeetCode 108. Convert Sorted Array to Binary Search Tree

Question Link

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

    TreeNode traversal(int[] nums, int low, int high){
        if(low > high)
            return null;
        int middle = low + (high - low)/2;
        TreeNode node = new TreeNode(nums[middle]);
        node.left = traversal(nums, low, middle-1);
        node.right = traversal(nums, middle+1, high);
        return node;
    }
}
  • low + ((high - low) >> 1) is equals to (low+high)/2. The first one can avoid cross-border problem when high and low are bigest int.

LeetCode 538. Convert BST to Greater Tree

Question Link

class Solution {
    int pre = 0;    // record the value of previous node
    public TreeNode convertBST(TreeNode root) {
        traversal(root);
        return root;
    }

    void traversal(TreeNode root){
        if(root == null)
            return;

        traversal(root.right);
        pre += root.val;
        root.val = pre;
        traversal(root.left);
    }
}
<think>好的,我现在要帮用户分析这个条件表达式:`if(StringUtils.isBlank(sOsFlag) || sOsFlag.trim().length<13)`。首先,我需要理解用户的需求。他们可能是在处理一个字符串验证的问题,特别是在检查某个变量是否符合特定条件。 首先,分解表达式。这个条件由两部分组成,用逻辑或(||)连接。左边是`StringUtils.isBlank(sOsFlag)`,右边是`sOsFlag.trim().length<13`。用户可能想确保`sOsFlag`不为空,并且长度足够,否则执行某些操作。 接下来,我需要考虑用户的使用场景。这个条件可能出现在表单验证、数据处理或者业务逻辑中。例如,在保存数据前检查字段的有效性,或者在处理输入时防止空值或过短的值导致错误。 然后,注意可能的陷阱。比如,如果`sOsFlag`为null,调用`trim()`会导致空指针异常。用户可能没有意识到这一点,或者他们使用的`StringUtils.isBlank`已经处理了null的情况。需要确认`StringUtils`的实现,是否在isBlank中检查了null,这样右边的`sOsFlag.trim()`就不会在null时执行。 另外,用户可能希望字符串在去除空格后至少有13个字符。例如,某种标识符或代码需要满足长度要求。这时候,如果用户输入了带空格但实际有效部分不足13字符的情况,就会被拒绝。 还要考虑用户可能遇到的问题。比如,当他们使用这个条件时,是否有时条件不按预期触发?比如,当`sOsFlag`全是空格时,trim后长度变为0,也会满足右边的条件,导致整个表达式为真。用户可能需要明确是否需要处理这种情况,或者是否应该将两个条件分开处理。 此外,用户可能对`StringUtils.isBlank`不太熟悉,需要解释它的功能,比如检查字符串是否为null、空字符串或仅包含空白字符。这有助于他们理解左边的条件覆盖了哪些情况。 最后,用户可能需要优化建议。比如使用Java的Optional来处理null,或者使用更现代的字符串方法,如`isBlank()`在Java 11+中的用法,或者如何将两个条件合并得更简洁。同时,提醒他们注意空指针异常的可能性,尤其是在没有`StringUtils`的情况下直接调用`trim()`。</think>### **条件表达式解析** `if(StringUtils.isBlank(sOsFlag) || sOsFlag.trim().length < 13)` 是一个复合逻辑判断,用于验证字符串 `sOsFlag` 的合法性。以下是分步解析: --- #### **1. 表达式拆解** - **逻辑结构**: `条件A || 条件B`(任意一个条件成立时,整体为 `true`) - **条件A**:`StringUtils.isBlank(sOsFlag)` **条件B**:`sOsFlag.trim().length < 13` --- #### **2. 条件A详解** - **`StringUtils.isBlank(sOsFlag)`** 这是 Apache Commons Lang 或类似工具库中的方法,用于检查字符串是否为空或仅含空白字符。其逻辑等价于: ```java sOsFlag == null || sOsFlag.trim().isEmpty() ``` **覆盖的非法情况**: - `sOsFlag` 为 `null` - `sOsFlag` 为空字符串 `""` - `sOsFlag` 仅包含空格(如 `" "`) --- #### **3. 条件B详解** - **`sOsFlag.trim().length < 13`** 对字符串 `sOsFlag` 执行以下操作: 1. **`.trim()`**: 移除首尾空白字符 2. **`.length`**: 计算剩余字符数量 3. **`< 13`**: 验证长度是否小于 13 **覆盖的非法情况**: - 去除空格后的字符串长度不足 13(如 `" hello "` 实际有效内容为 `"hello"`,长度 5) --- #### **4. 整体逻辑** 表达式表示:**当 `sOsFlag` 为空/全空格,或其有效内容长度不足 13 时,条件成立**。 --- #### **5. 典型使用场景** ```java // 示例:验证字符串合法性 if (StringUtils.isBlank(sOsFlag) || sOsFlag.trim().length() < 13) { throw new IllegalArgumentException("sOsFlag 必须非空且有效长度≥13"); } // 合法时继续后续操作 ``` --- #### **6. 注意事项** - **空指针风险**: 若 `sOsFlag` 为 `null`,直接调用 `sOsFlag.trim()` 会抛出 `NullPointerException`。但此处因条件A已通过 `StringUtils.isBlank` 隐式检查了 `null`,故条件B执行时 `sOsFlag` 一定非空。 - **依赖库**: `StringUtils` 需引入 Apache Commons Lang 或类似工具库。若未使用工具库,可手动实现: ```java if (sOsFlag == null || sOsFlag.trim().isEmpty() || sOsFlag.trim().length() < 13) ``` --- #### **7. 优化建议** - **Java 11+ 简化**: 使用内置 `String.isBlank()` 替代工具库: ```java if (sOsFlag == null || sOsFlag.isBlank() || sOsFlag.trim().length() < 13) ``` - **合并操作**: 避免重复调用 `trim()`: ```java String trimmed = sOsFlag != null ? sOsFlag.trim() : ""; if (trimmed.isEmpty() || trimmed.length() < 13) ``` --- ### **总结** - **核心目的**:确保字符串有实际内容且有效长度满足最低要求。 - **安全关键**:通过条件A规避空指针异常。 - **适用场景**:表单校验、API参数检查、数据处理前的预验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值