算法day18-二叉树(8)
目录
- 修剪二叉搜索树
- 将有序数组转换为二叉搜索树
- 把二叉搜索树转换为累加树
一、修建二叉搜索树
https://leetcode.cn/problems/trim-a-binary-search-tree/?envType=problem-list-v2&envId=8At1GmaZ

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); }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; } } }
二、将有序数组转换为二叉搜索树
https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/?envType=problem-list-v2&envId=8At1GmaZ

class Solution { public TreeNode sortedArrayToBST(int[] nums) { return helper(nums,0,nums.length-1); } public TreeNode helper(int[] nums,int left, int right){ if(left>right){ return null; } int mid = (left+right)/2; TreeNode root = new TreeNode(nums[mid]); root.left = helper(nums,left,mid-1); root.right = helper(nums,mid+1,right); return root; } }
三、二叉搜索树转换为累加树
https://leetcode.cn/problems/convert-bst-to-greater-tree/?envType=problem-list-v2&envId=8At1GmaZ


class Solution { int sum = 0; public TreeNode convertBST(TreeNode root) { traverse(root); return root; } public void traverse(TreeNode root) { if (root == null) return; // 先处理右子树(较大的值) traverse(root.right); // 更新当前节点 sum += root.val; root.val = sum; // 再处理左子树(较小的值) traverse(root.left); } }
浙公网安备 33010602011771号