[JZoffer]树的子结构

题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

解题思路

将AB两个二叉树通过前序遍历成list数组,
然后通过遍历listA依次去找listA[i:len(listB)+i]与listB是否相同,相同即找到子结构,反之则为False;
其中还需要考虑AB其一为空的状态以及A==B的状态。

代码

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 转换成数组进行求解
    def __init__(self):
        self.pR = []
    def tree2list(self, pRoot):  # 前序遍历
        if not pRoot:
            return
        self.pR.append(pRoot.val)
        self.tree2list(pRoot.left)
        self.tree2list(pRoot.right)
    def HasSubtree(self, pRoot1, pRoot2):
        if not pRoot2 or not pRoot1:
            return False
        # 将p1和p2都前序遍历
        self.tree2list(pRoot1)
        list1 = self.pR
        self.pR = []
        self.tree2list(pRoot2)
        list2 = self.pR

        # 相同判断
        if list1 == list2:
            return True
        # 依次判断
        while len(list1) != len(list2):
            if list1[:len(list2)] == list2:
                return True
            list1 = list1[1:]
        return False

猜你喜欢

转载自blog.csdn.net/sinat_24648637/article/details/80331334