LeetCode Algorithm 572. 另一棵树的子树

Posted Alex_996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Algorithm 572. 另一棵树的子树相关的知识,希望对你有一定的参考价值。

572. 另一棵树的子树

Ideas

首先想到的就是递归判断两棵树的每一个节点是否相等,那么就需要将subRootroot的每一个节点构成的子树判断是否相同。

递归判断相等的逻辑比较简单,首先当前两个节点值相等,然后递归判断左子树是否相等,再递归判断右子树是否相等。

递归的终止条件,就是两棵树同时到达了叶子结点,并且都没有孩子节点,此时说明这两颗子树相等。

再具体一点,我们首先要判断subRoot是不是root的子树,有三种情况:

  1. subRootroot两棵树相等;
  2. subRootroot的左子树;
  3. subRootroot的右子树。

然后我们要判断subRootroot是不是相等,需要满足三个条件:

  1. 当前两棵树的根节点相等;
  2. subRoot的左子树和root的左子树相等;
  3. subRoot的右子树和root的右子树相等;

所以这里有两个递归的过程,我们需要再定义一个辅助函数。

Code

Python

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


class Solution:
    def isSubtree(self, root: TreeNode, subRoot: TreeNode) -> bool:
        if not root and not subRoot:
            return True
        if not root or not subRoot:
            return False
        return self.isSameTree(root, subRoot) or self.isSubtree(root.left, subRoot) or self.isSubtree(root.right, subRoot)

    def isSameTree(self, root: TreeNode, subRoot: TreeNode):
        if not root and not subRoot:
            return True
        if not root or not subRoot:
            return False
        return root.val == subRoot.val and self.isSameTree(root.left, subRoot.left) and self.isSameTree(root.right, subRoot.right)

以上是关于LeetCode Algorithm 572. 另一棵树的子树的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode572另一个树的子树

LeetCode-572. 另一棵树的子树

LeetCode 572. 另一个树的子树(Subtree of Another Tree) 40

leetcode572.另一个树的子树

leetcode572.另一个树的子树

LeetCode 572. 另一个树的子树