原题地址:https://leetcode.com/problems/trim-a-binary-search-tree/description/
大意:修剪一个二叉搜索树。
什么是二叉搜索树? 来源wiki
二叉查找树(英语:Binary Search Tree),也称为二叉搜索树、有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:
- 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
- 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
- 任意节点的左、右子树也分别为二叉查找树;
- 没有键值相等的节点。
从二叉搜索树的概念,可以看出,如果给定二叉搜索树的根节点为a,a<L的话,就要把a和a的左子树全部砍掉。a>R的话,就要把a和a的右子树全部砍掉,再用递归的方法,就可以很容易写出代码
# 669. Trim a Binary Search Tree
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def trimBST(self, root, L, R):
"""
:type root: TreeNode
:type L: int
:type R: int
:rtype: TreeNode
"""
if not root:
return root
if (root.val < L):
return self.trimBST(root.right, L, R)
if (root.val > R):
return self.trimBST(root.left, L, R)
root.left = self.trimBST(root.left, L, R)
root.right = self.trimBST(root.right, L, R)
return root