450.删除二叉搜索树中的节点
- 对于原地操作二叉树的题目并且返回二叉树的题目来讲,一般的递归套路都有
- root.left = 递归函数(); root.right = 递归函数()
- 对于有无需要=的题目还需要体会一下
class Solution:
def deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]:
if not root:
return None
if root.val>key:
root.left = self.deleteNode(root.left,key)
elif root.val<key:
root.right = self.deleteNode(root.right,key)
else:
if not root.left and not root.right:
root = None
elif not root.left:
root = root.right
elif not root.right:
root = root.left
else:
pre = root.right
while(pre and pre.left):
pre = pre.left
pre.left = root.left
root = root.right
return root
669. 修剪二叉搜索树
-
懵懵懂懂写出来了 虽然还是有点迷哦
class Solution:
def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:
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)
elif root.val<low:
root = self.trimBST(root.right,low,high)
else:
root = self.trimBST(root.left,low,high)
return root
108.将有序数组转换为二叉搜索树
- 递归简单办法
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
if not nums:
return None
N = len(nums)//2
root = TreeNode(nums[N])
root.left = self.sortedArrayToBST(nums[:N])
root.right = self.sortedArrayToBST(nums[N+1:])
return root
538.把二叉搜索树转换为累加树
- 反中序遍历,右中左,利用一个self.pre记录前面总和
class Solution:
def sumTree(self,root):
if not root:
return None
self.sumTree(root.right)
root.val += self.pre
self.pre = root.val
self.sumTree(root.left)
def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
self.pre = 0
self.sumTree(root)
return root