669. 修剪二叉搜索树
题目描述: 669. 修剪二叉搜索树.
解法
递归
class Solution(object):
def trimBST(self, root, low, high):
if not root:
return None
if root.val >= low and root.val <= high:
root.left = self.trimBST(root.left,low,high)
root.right = self.trimBST(root.right,low,high)
return root
elif root.val < low:
return self.trimBST(root.right,low,high)
else:
return self.trimBST(root.left,low,high)
需要注意的是,如果root不在范围之内,那么它的左右子树有可能有一个是在范围之内的,遍历有可能在范围之内的子树就好了。
108.将有序数组转换为二叉搜索树
题目描述: 108.将有序数组转换为二叉搜索树.
解法
递归
class Solution(object):
def sortedArrayToBST(self, nums):
if not nums:
return None
mid = len(nums) // 2
root = TreeNode(nums[mid])
root.left = self.sortedArrayToBST(nums[:mid])
root.right = self.sortedArrayToBST(nums[mid+1:])
return root
538.把二叉搜索树转换为累加树
题目描述: 538.把二叉搜索树转换为累加树.
解法
递归
class Solution(object):
def travel(self,node):
if not node:
return
self.travel(node.right)
if self.pre:
node.val += self.pre.val
self.pre = node
self.travel(node.left)
def convertBST(self, root):
self.pre = None
self.travel(root)
return root
因为是从后往前累加,只需变成反向的中序遍历即可