力扣:修剪搜索二叉树java
流程:先序遍历
递归三部曲:
参数和返回值:返回 值为节点类型(方便递归时返回修剪后的节点),参数为根节点和范围low和high
结束条件:遇到空节点返回null
单层递归逻辑:
节点不小于low就返回对节点右子树的修剪结果。相当于删除了当前节点
节点大于high就返回对节点左子树的修剪结果。相当于删除了当前节点
递归 遍历得到对右子树修剪的结果和对左子树修剪的结果,,返回root。
代码:
class Solution {
public TreeNode trimBST(TreeNode root, int low, int high) {
if(root == null) return null;//结束条件,节点等于null,返回nul
if(root.val<low){//节点值小于最小值,则返回其右子树修剪后的结果
TreeNode right = trimBST(root.right,low,high);
return right;
}else if(root.val>high){//节点值大于最小值,则返回其左子树修剪后的结果
TreeNode left = trimBST(root.left,low,high);
return left;
}
root.right = trimBST(root.right,low,high);//节点在范围内,就获取左右子树的修剪结果
root.left = trimBST(root.left,low,high);
return root;//返回根节点
}
}