leetcode是否是子树subtree

leetcode:是否是另外一个树的子树

方法:双重递归

  1. 另一个树的子树
    给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
    
    示例 1:
    给定的树 s:
    
         3
        / \
       4   5
      / \
     1   2
    给定的树 t:
    
       4 
      / \
     1   2
    返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。
    
    示例 2:
    给定的树 s:
    
         3
        / \
       4   5
      / \
     1   2
        /
       0
    给定的树 t:
    
       4
      / \
     1   2
    返回 false。
    
    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def isSubtree(self, s: TreeNode, t: TreeNode) -> bool:
            if not t:
                return True 
            if not s:
                return False 
            return self.pretravel(s, t) or self.isSubtree(s.left, t) or self.isSubtree(s.right, t)
        
        def pretravel(self, s, t):
            if not t and not s:
                return True 
            if s and not t:
                return False 
            if not s and t:
                return False 
            if t.val != s.val:
                return False 
            return self.pretravel(s.left, t.left) and self.pretravel(s.right, t.right) 
    
  2. 1367. 二叉树中的列表
    给你一棵以 root 为根的二叉树和一个 head 为第一个节点的链表。
    
    如果在二叉树中,存在一条一直向下的路径,且每个点的数值恰好一一对应以 head 为首的链表中每个节点的值,那么请你返回 True ,否则返回 False 。
    
    一直向下的路径的意思是:从树中某个节点开始,一直连续向下的路径。
    
    示例1:输入:head = [4,2,8], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]
    输出:true
    解释:树中蓝色的节点构成了与链表对应的子路径。
    
    示例 2:
    输入:head = [1,4,2,6], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]
    输出:true
    
    示例 3:
    输入:head = [1,4,2,6,8], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]
    输出:false
    解释:二叉树中不存在一一对应链表的路径。
    
    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def isSubPath(self, head: ListNode, root: TreeNode) -> bool:
            if not head:
                return True 
            if not root:
                return False      
            return self.pretravel(root,head) or self.isSubPath(head,root.left) or self.isSubPath(head, root.right)
            
        def pretravel(self, root, head):
            if not head:
                return True 
            if not root:
                return False 
            if root.val != head.val:
                return False 
            else:
                return self.pretravel(root.left, head.next) or self.pretravel(root.right, head.next)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值