刷力扣热题–第十四天:141.环形链表+543.二叉树的直径
菜鸟第十四天开始奋战敲代码,持之以恒,见证成长
1.题目简介
(1)环形链表
(2)二叉树的直径
2.题目解答
(1)环形链表
判断是否有环,没那就是看之前遍历过的,之后是否在遍历过的矩阵里,时间复杂度O(N),空间复杂度O(N)
ok,是这样,这里我看到网上有用到快慢指针等别的算法,等进阶的时候再来继续做.
(2)二叉树的直径
刚开始做的时候 忽视了这条路径可能不会过根节点,所以导致了出现了一点偏差,但也和最大深度的解法类似,只是不断递归,以该节点为跟节点的左右子树的最大长度,并返回最大长度结果值.时间复杂度O(N),空间复杂度O(1).
3.心得体会
最近在刷链表+树+矩阵三种数据结构,主打一个先熟悉,再精通吧~
(1)环形链表
class Solution(object):
def hasCycle(self, head):
"""
:type head: ListNode
:rtype: bool
"""
temp = []
while head:
if head in temp:
return True
else:
temp.append(head)
head = head.next
return False
(2)二叉树的直径
class Solution(object):
def diameterOfBinaryTree(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self.length = 0
def depth(root):
if root:
left_length = depth(root.left)
right_length = depth(root.right)
else:
return 0
self.length = max(self.length,left_length+right_length)
return max(left_length,right_length) + 1
depth(root)
return self.length
4.做题时长
7月18日 15:45-15:57 16:00-16:35