解题思路
与专题的删除节点类似,可以参考LC450
代码
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
class Solution: def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]: if not root: return None if root.val < low: return self.trimBST(root.right, low, high) if root.val > high: return self.trimBST(root.left, low, high)
root.left = self.trimBST(root.left, low, high) root.right = self.trimBST(root.right, low, high) return root
|
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
class Solution { public: TreeNode* trimBST(TreeNode* root, int low, int high) { if (root == NULL) return root; if (root != NULL) root->left = trimBST(root->left, low, high); if (root != NULL) root->right = trimBST(root->right, low, high); if (root->val < low || root->val > high) { if (root->left != NULL && root->right != NULL) { TreeNode* cur = root->right; while (cur->left != NULL) { cur = cur->left; } cur->left = root->left; TreeNode* tmp = root; root = root->right; delete tmp; return root; } else if (root->left != NULL) { return root->left; } else if (root->right != NULL) { return root->right; } else { return root->left; } } return root; } };
|
Go
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func trimBST(root *TreeNode, low int, high int) *TreeNode {
if root == nil {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
}