669. 修剪二叉搜索树
跳过难题
感觉忙起来根本没有闲心思做更深的思考,只是机械的看懂了,刷完了
108.将有序数组转换为二叉搜索树
构造二叉搜索树:就是顺序把数据存入二叉树,不断使用二分法
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
root = self.input_num(nums,0,len(nums)-1)#左闭右闭
return root
def input_num(self,nums,left,right):
if right < left:#终止条件
return None
## 每层要做的事:把遍历到的这个节点转化为treenode
mid = (left+right)//2
# print(mid)
# print(left)
node = TreeNode(nums[mid])
node.left = self.input_num(nums,left,mid-1)#左
node.right = self.input_num(nums,mid+1,right)#
return node
538.把二叉搜索树转换为累加树
思路很妙,因为是大于等于本身的数的合集,那么按照右中左的顺序遍历,每次只需要加上当前节点的值,那么此刻的和即为本节点需要存储的值。
递归的写法,假设推到最后一层(第一次做的运算),整理需要做的操作
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
self.curSum = 0#存储求和的值
self.getSumNum(root)
return root
def getSumNum(self,node):
if not node:
return
self.getSumNum(node.right)#追到最深的右节点
self.curSum += node.val#当前节点要存储的值
node.val = self.curSum#更改当前节点的值
self.getSumNum(node.left)