● 669. 修剪二叉搜索树
1.思路
方法一:递归法
修剪的操作并不是在终止条件上进行的
如果root(当前节点)的元素小于low的数值,那么应该递归右子树,并返回右子树符合条件的头结点
如果root(当前节点)的元素大于high的,那么应该递归左子树,并返回左子树符合条件的头结点。
方法二:迭代法
没看
2.代码实现
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);
root.left=trimBST(root.left,low,high);
root.right=trimBST(root.right,low,high);
return root;
}
}
● 108.将有序数组转换为二叉搜索树
1.思路
方法一: 递归
本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间
方法二:迭代
三个队列模拟
没看
2.代码实现
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
TreeNode root=tranversal(nums,0,nums.length-1);
return root;
}
public TreeNode tranversal(int[] nums, int left, int right){
if(left>right)
return null;
int mid=left+((right-left)/2);
TreeNode temp= new TreeNode(nums[mid]);
temp.left=tranversal(nums,left,mid-1);
temp.right=tranversal(nums,mid+1,right);
return temp;
}
}
● 538.把二叉搜索树转换为累加树
1.思路
方法一:递归
从树中可以看出累加的顺序是右中左,所以我们需要反中序遍历这个二叉树,然后顺序累加就可以了。
本题依然需要一个pre指针记录当前遍历节点cur的前一个节点,这样才方便做累加。
方法二:迭代
有点难 没看
2.代码实现
class Solution {
int pre=0;
public TreeNode convertBST(TreeNode root) {
if(root==null)
return null;
convertBST(root.right);
root.val+=pre;
pre=root.val;
convertBST(root.left);
return root;
}
}
● 模板
1.思路
2.代码实现