文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、leetcode 669. 修剪二叉搜索树§§
1.题目链接:
2.独立做题问题总结
一开始做的时候用的。
3.解法总结:
- 递归
当当前值小于low,在当前节点右子树查找,当当前值大于high,在当前节点左子树查找
if root == None:
return None
if root.val < low:
right = self.trimBST(root.right, low, high)
return right
elif root.val > high:
left = self.trimBST(root.left, low, high)
return left
root.left = self.trimBST(root.left, low, high)
root.right = self.trimBST(root.right, low, high)
return root
- 迭代
二、leetcode 108. 将有序数组转换为二叉搜索树
1.题目链接:
2.独立做题问题总结
3.解法总结:
类似106.从中序与后序遍历序列构造二叉树
654.最大二叉树
- 递归
num = len(nums)
if num == 0:
return None
if num == 1:
return TreeNode(nums[0])
mid = num // 2
root = TreeNode(nums[mid])
numsleft = nums[0:mid]
numsright = nums[mid + 1:]
root.left = self.sortedArrayToBST(numsleft)
root.right = self.sortedArrayToBST(numsright)
return root
三、leetcode 538. 把二叉搜索树转换为累加树
1.题目链接:
2.独立做题问题总结
3.解法总结:
- 递归(右中左
if root == None:
return None
def traversal(root):#反中序遍历 (右中左
nonlocal sum
if root == None:
return None
traversal(root.right)
preval = root.val
# print(f"pre root val = {root.val}")
root.val += sum
# print(f"after root val = {root.val}, sum = {sum}")
sum += preval
traversal(root.left)
sum = 0
traversal(root)
return root