剑指 返回链表节点倒数第k个节点 时间复杂度oN 判断A B 两树 B是否为A的子树
程序员文章站
2024-03-15 18:59:06
...
class Solution:
def FindKthToTail(self, head, k):
if head==None or k<=0:
return None
p1=head
p2=head
p3=head
count=0
while p3!=None:
p3=p3.next
count+=1
if k>count:
return None
for i in range(k-1):
p2=p2.next
while p2.next !=None:
p1=p1.next
p2=p2.next
return p1
可以滑动窗口 时间复杂度oN
class Solution:
def iszs(self,p1,p2):
if p2==None:
return True
if p1==None:
return False
if p1.val != p2.val:
return False
return self.iszs(p1.left,p2.left) and self.iszs(p1.right,p2.right)
def HasSubtree(self, pRoot1, pRoot2):
if pRoot1 is None or pRoot2 is None:
return False
cur=pRoot1
if self.iszs(cur,pRoot2):
return True
return self.HasSubtree(cur.left,pRoot2) or self.HasSubtree(cur.right,pRoot2)
思路:定义一个函数判断两树是否为相同的,然后遍历第一根树(深度优先遍历 递归调用此函数即可)
犯错:最后 return 是 or 不是and
深度优先遍历的递归终止条件! !!!一定要有终止。
上一篇: 有向图中以一个顶点为起始点的所有路径
下一篇: 求1到10的阶乘和