欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 代码随想录day20 | leetcode 669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

代码随想录day20 | leetcode 669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

2025/1/6 9:41:50 来源:https://blog.csdn.net/ajbsyuinbsn/article/details/144831057  浏览:    关键词:代码随想录day20 | leetcode 669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
修剪二叉搜索树

以下是修剪二叉搜索树的步骤:

  1. 如果当前节点为空,直接返回空。
  2. 如果当前节点的值小于L,那么它和它的左子树都不在范围内,应该修剪掉。因此,返回修剪其右子树的结果,右子树中可能含有符合条件的结果,对其修剪。
  3. 如果当前节点的值大于R,那么它和它的右子树都不在范围内,应该修剪掉。因此,返回修剪其左子树的结果。
  4. 如果当前节点的值在LR之间,那么保留当前节点,并递归修剪其左右子树。
public TreeNode trimBST(TreeNode root, int low, int high) {if (root == null){return null;}if (root.val<low){TreeNode node = trimBST(root.right,low,high);//修剪左孩子的右子树return node;}if (root.val>high){TreeNode node = trimBST(root.left,low,high);return node;}root.left = trimBST(root.left,low,high);root.right = trimBST(root.right,low,high);return root;}

将有序数组转换为二叉搜索树

题目:给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。
构造二叉树:为了保证平衡,使左区间的节点数与右区间的节点数相同,从中间选取根节点,切割数组使用左闭右闭,递归重复步骤。

 public TreeNode sortedArrayToBST(int[] nums) {TreeNode root = PF(nums,0,nums.length-1);return root;}public TreeNode PF(int[] nums,int left, int right){TreeNode root;if (left> right){//当left = right 时数组中只有一个元素,也需要做处理。return null;}int mid = (left + right)/2;root = new TreeNode(nums[mid]);root.left = PF(nums,left,mid-1);root.right = PF(nums,mid+1,right);return root;}

把二叉搜索树转换为累加树

中序遍历:从小到大。累加,从大到小。
从树中可以看出累加的顺序是右中左,所以我们需要反中序遍历这个二叉树,然后顺序累加就可以了

int per = 0;//如果 per 是局部变量,那么它在每次调用时都会被重置,这样就无法实现累加的效果。public TreeNode convertBST(TreeNode root) {dft(root);return root;}public void dft(TreeNode root){if (root==null){return;}dft(root.right);per += root.val;root.val = per;dft(root.left);}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com