二叉树part8
二叉树part8
669. 修剪二叉搜索树 - 力扣(LeetCode)
本题难在理解修剪的代码逻辑,我没理解😢
class Solution {
public TreeNode trimBST(TreeNode root, int low, int high) {
if(root == null){
return root;
}
if(root.val < low){
return trimBST(root.right, low, high);
}
if(root.val > high){
return trimBST(root.left, low, high);
}
root.left = trimBST(root.left, low, high);
root.right = trimBST(root.right, low, high);
return root;
}
}
108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode)
迭代不好写,递归好写
本题与二分高度相关,注意分界条件
//左闭右开
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return traversal(nums, 0, nums.length);
}
public TreeNode traversal(int[] nums, int left, int right){
if(left >= right){
return null;
}
int mid = left + ((right - left) >> 1);
TreeNode root = new TreeNode(nums[mid]);
root.left = traversal(nums, left, mid);
root.right = traversal(nums, mid + 1, right);
return root;
}
}
//左闭右闭
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return traversal(nums, 0, nums.length - 1);
}
public TreeNode traversal(int[] nums, int left, int right){
if(left > right){
return null;
}
int mid = left + ((right - left) >> 1);
TreeNode root = new TreeNode(nums[mid]);
root.left = traversal(nums, left, mid - 1);
root.right = traversal(nums, mid + 1, right);
return root;
}
}
538. 把二叉搜索树转换为累加树 - 力扣(LeetCode)
注意遍历顺序--中序倒过来--右中左,然后累加数字,很简单
class Solution {
int sum = 0;
public TreeNode convertBST(TreeNode root) {
if(root == null){
return null;
}
root.right = convertBST(root.right);
sum += root.val;
root.val = sum;
root.left = convertBST(root.left);
return root;
}
}
感觉没有提到过红黑树啊,是这些题目难度已经囊括了红黑树的难度吗,还是在后面还有提及
总结,每种二叉树的题目都可以用递归来做,这样会很好找思路和总结思路
浙公网安备 33010602011771号