31_修剪二叉搜索树

简介: 31_修剪二叉搜索树

669.修剪二叉搜索树

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

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

示例 1:

输入:root = [1,0,2], low = 1, high = 2
输出:[1,null,2]

示例 2:

输入:root = [3,0,4,null,2,null,null,1], low = 1, high = 3
输出:[3,2,null,1]

递归法

class Solution {
    TreeNode left, right;
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if (root == null)  return null;
        if (root.val < low) {
            left = trimBST(root.right, low, high);// 寻找符合区间[low, high]的节点
            return left;
        }
        if (root.val > high) {
            right = trimBST(root.left, low, high);// 寻找符合区间[low, high]的节点
            return right;
        }
        root.left = trimBST(root.left, low, high); // root->left接入符合条件的左孩子
        root.right = trimBST(root.right, low, high);// root->right接入符合条件的右孩子
        return root;
    }
}
相关文章
|
6月前
|
Java C++ Python
leetcode-669:修剪二叉搜索树
leetcode-669:修剪二叉搜索树
44 1
|
1月前
【LeetCode 47】669.修剪二叉搜索树
【LeetCode 47】669.修剪二叉搜索树
9 0
|
2月前
|
存储 算法 C#
C#二叉搜索树算法
C#二叉搜索树算法
|
6月前
|
存储 算法 程序员
【算法训练-二叉树 七】【二叉搜索树】验证二叉搜索树、将二叉搜索树转为排序的双向循环链表
【算法训练-二叉树 七】【二叉搜索树】验证二叉搜索树、将二叉搜索树转为排序的双向循环链表
63 0
C++二叉树剪枝
C++二叉树剪枝
算法训练Day23|669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树
算法训练Day23|669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树
|
算法 Java
代码随想录训练营day23| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树...
代码随想录训练营day23| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树...
leetcode 669修剪二叉搜索树
leetcode 669修剪二叉搜索树
43 0
leetcode 669修剪二叉搜索树
|
JavaScript
春意盎然,适合“二叉树剪枝”
给你二叉树的根结点 root ,此外树的每个结点的值要么是 0 ,要么是 1 。 返回移除了所有不包含 1 的子树的原二叉树。 节点 node 的子树为 node 本身加上所有 node 的后代。
|
算法 前端开发 JavaScript
【戏玩算法】10-二叉搜索树
前面我们介绍了二叉树这个数据结构以及二叉树的遍历算法,这篇文章我们来学习一下一个特殊的二叉树——二叉搜索树(BST Binary Search Tree),也叫二叉排序树、二叉查找树。
92 0
【戏玩算法】10-二叉搜索树