欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

剑指 返回链表节点倒数第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
深度优先遍历的递归终止条件! !!!一定要有终止。


相关标签: leetcode刷题