1 leetcode226. 翻转二叉树
题目链接:226. 翻转二叉树 - 力扣(LeetCode)
文章链接:代码随想录
视频链接:听说一位巨佬面Google被拒了,因为没写出翻转二叉树 | LeetCode:226.翻转二叉树哔哩哔哩bilibili
自己的思路:之前想过就是使用层序遍历的方法来做这一道题目,后来感觉有一些行不通,就没去尝试,直接看视频,加看别人的代码做的,然后有一种自己很蠢的感觉
1.1 视频后的代码实现
就是左右位置交换进行保存即可
# 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 invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]: if root == None: return None root.left,root.right = root.right,root.left self.invertTree(root.left) self.invertTree(root.right) return root
1.2 小结
-
主要就是一个思路吧,遇到中间节点进行保存,然后左右节点的位置进行交换,感觉递归我好像在这里第一次理解
2 leetCode101.对称二叉树
题目链接:101. 对称二叉树 - 力扣(LeetCode)
文章链接:代码随想录
视频链接:新学期要从学习二叉树开始! | LeetCode:101. 对称二叉树哔哩哔哩bilibili
自己的思路:之前想过就是使用层序遍历的方法来做这一道题目,后来感觉有一些行不通,就没去尝试,直接看视频,加看别人的代码做的,然后有一种自己很蠢的感觉
2.1 看视频后做的方法
思路:
-
分析问题,这个题目是对称二叉树,首先考虑递归里面的内容,那么进入的是什么序列呢,就是后序排序
-
确定排序以后,然后判断哪些数据是需要返回的,分析出四种情况,然后再对数据进行迭代,迭代选择的时候,就是看比较的数据是什么,我们比较是不是对称,然后就是由外向内比较
-
最后就是迭代,返回比较的两个值相不相同
-
函数调用
# 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 isSymmetric(self, root: Optional[TreeNode]) -> bool: if root == None: return True return self.compare(root.left,root.right) def compare(self,left,right): if left==None and right !=None: return False elif left!=None and right == None: return False elif left==None and right == None: return True elif left.val != right.val: return False outside = self.compare(left.left,right.right) inside = self.compare(left.right,right.left) same = outside and inside return same
2.2 小结
-
这道题有一种,会了以后自己好傻,不会的时候,这是啥的感觉
3 LeetCode104.二叉树的最大深度
题目链接:104. 二叉树的最大深度 - 力扣(LeetCode)
文章链接:代码随想录
视频链接:二叉树的高度和深度有啥区别?究竟用什么遍历顺序?很多录友搞不懂 | LeetCode:104.二叉树的最大深度哔哩哔哩bilibili
自己的思路:一点思路,使用前序遍历的方法,然后也有一点左右比较,进行下一层吧
3.1 看视频以后的代码实现
看了视频,觉得其实用高度来求,比深度,更容易一些
# 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 maxDepth(self, root: Optional[TreeNode]) -> int: return self.get_height(root) def get_height(self,node): if node == None: return 0 leftheight = self.get_height(node.left) rightheight = self.get_height(node.right) max_height = 1+max(leftheight,rightheight) return max_height
3.2 小结
-
这一题里面有一个地方写错了,就是一个类中,他们两个属于同一个级别的,但是第一次缩进了
-
在函数类别定义函数的时候,需要对其进行一个
self
4 leetcode111.二叉树的最小深度
题目链接:111. 二叉树的最小深度 - 力扣(LeetCode)
文章链接:代码随想录
视频链接:看起来好像做过,一写就错! | LeetCode:111.二叉树的最小深度哔哩哔哩bilibili
思路:想着将上一道题改一下,没想到报错了,然后就看到了另一种情况,在想如何处理
4.1 看视频后的一部分处理
主要是面对左右有空的情况,学到了学到了,其实可以理解为这个二叉树从头遍历,只需要两边计算即可,哈哈哈哈哈哈
# 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 minDepth(self, root: Optional[TreeNode]) -> int: return self.depth(root) def depth(self,node): if node == None: return 0 leftdepth = self.depth(node.left) rightdepth = self.depth(node.right) if node.left == None and node.right != None: return 1+rightdepth if node.right == None and node.left != None: return 1+leftdepth min_dep = 1+min(leftdepth,rightdepth) return min_dep
4.2 小结
-
这个题,就是在一道一道下来后,发现这道题挺简单的,然后尝试自己写了,写通了还理解了
5 今日总结
-
记录一下第一次因为项目通宵,后来结果我来写了这个题目
-
递归真的有理解了,老师讲的太清楚了,真的,可能第一次看会有不懂得,但是越看越明了,路越好走