LeetCode | 面試題26. 樹的子結構【Python】

LeetCode 面試題26. 樹的子結構【Medium】【Python】【DFS】

問題

力扣node

輸入兩棵二叉樹A和B,判斷B是否是A的子結構。(約定空樹不是任意一個樹的子結構)python

B是A的子結構, 即 A中有出現和B相同的結構和節點值。git

例如:
給定的樹 A:github

3
  / \
  4  5
 / \
 1  2

給定的樹 B:面試

4 
 /
1

返回 true,由於 B 與 A 的一個子樹擁有相同的結構和節點值。code

示例 1:leetcode

輸入:A = [1,2,3], B = [3,1]
輸出:false

示例 2:get

輸入:A = [3,4,5,1,2], B = [4,1]
輸出:true

限制:it

0 <= 節點個數 <= 10000io

思路

兩重DFS

第一重:找到起點。先判斷當前節點,若是不對就判斷左子樹和右子樹。
第二重:從找到的起點開始判斷剩下的點。
Python3代碼
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool:
        if not A or not B:
            return False
        return self.dfs(A, B) or self.isSubStructure(A.left, B) or self.isSubStructure(A.right, B)
            
        
    def dfs(self, A: TreeNode, B:TreeNode):
        if not B:
            return True
        if not A:
            return False
        if not A.val == B.val:
            return False
        # A樹的根與B樹的根相等
        return self.dfs(A.left, B.left) and self.dfs(A.right, B.right)  # 注意這裏是 and

代碼地址

GitHub連接

類似題目

LeetCode 1367. 二叉樹中的列表

相關文章
相關標籤/搜索