摘要:
题目链接 解题思路:这里面有一个构造「平衡二叉树」,似乎很难。实际上,我们每次构造时都拿中点划分,就能得到平衡的。 具体来说process(nums, L, R)在nums[L, R]上构造平衡搜索二叉树,我们以中点mid=(R+L)/2是头,然后左节点process(nums, L, mid - 阅读全文
posted @ 2024-12-25 17:50
ouyangxx
阅读(28)
评论(0)
推荐(0)
摘要:
题目链接 解题思路:首先我们得知道人工怎么建这棵树。先序遍历[0, R1]第一个节点,就是根。然后我们在中序遍历[0, R2]找到根的位置,假如是x,那么,中序遍历中[0, x-1]就是左子树,中序遍历中[x+1, R2]就是右子树。那么先序遍历呢?左子树节点个数是x个,先序遍历是要先遍历完左子树, 阅读全文
posted @ 2024-12-25 17:37
ouyangxx
阅读(46)
评论(0)
推荐(0)
摘要:
题目链接 解题思路:做类似的二叉树的题,一定要有宏观的思路,不要陷入局部。例如,要「公平」对待每个节点,每个节点,可以单独看作「以该节点为根」的二叉树。本题目最大深度,我们单独看某一个节点,其实就是,max(左子树的深度,右子树的深度) + 1,那么左子树的深度,和右子树的深度怎么求?直接递归调用即 阅读全文
posted @ 2024-12-25 17:08
ouyangxx
阅读(16)
评论(0)
推荐(0)
摘要:
题目链接 解题思路:和层序遍历有明显的不同。通过观察,可以得到,当前层,和下一层的顺序是「相反」的,遇到这种相反的问题,考虑用栈。本题就是用两个栈,一个栈在放入时,先放左儿子,再放右儿子,另一个栈在放入时,先放右儿子,再放左儿子。然后两个栈交替使用即可。 为什么能得到这个思路?观察得到的 代码 cl 阅读全文
posted @ 2024-12-25 17:00
ouyangxx
阅读(25)
评论(0)
推荐(0)
摘要:
题目链接 解题思路:层序遍历就用队列,唯一需要注意的就是,要每一层单独收集,所以要用一个变量,记录每一层需要收集的数目,同时还要记录下一层需要收集的数目 代码 class Solution: def levelOrder(self, root: Optional[TreeNode]) -> List 阅读全文
posted @ 2024-12-25 16:43
ouyangxx
阅读(18)
评论(0)
推荐(0)
摘要:
题目链接 解题思路:递归的思路,就是左子树和右子树的值相等,同时,左子树的左子树与右子树的右子树要相似,左子树的右子树与右子树的左子树要相似。看代码很清晰 代码 class Solution: def process(self, node1, node2) -> bool: if node1 == 阅读全文
posted @ 2024-12-25 16:25
ouyangxx
阅读(16)
评论(0)
推荐(0)
摘要:
题目链接 解题思路:以某个节点为头,是否是搜索二叉树?其实就是问子树要信息 左子树:最大值,最小值,左子树整体是否是搜索二叉树? 右子树:最大值,最小值,右子树整体是否是搜索二叉树 得到信息后,再处理就行,详细处理看代码 代码 class Solution: class Info: def __in 阅读全文
posted @ 2024-12-25 15:59
ouyangxx
阅读(26)
评论(0)
推荐(0)
摘要:
题目链接 解题思路:中序遍历:左中右,用一个栈,同时用空来标识「中」,所以入栈顺序就是右->中->None->左 代码 class Solution: def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]: # 使用栈 # 阅读全文
posted @ 2024-12-25 15:09
ouyangxx
阅读(18)
评论(0)
推荐(0)

浙公网安备 33010602011771号