剑指offer 18.树的子结构

原题

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

Reference Answer

思路分析

  • 递归思想,如果根节点相同则递归调用IsSubtree(),如果根节点不相同,则判断root1的左子树和roo2是否相同,再判断右子树和root2是否相同;
  • 注意节点为空的条件,HasSubTree中,只要有树为空就返回false; IsSubtree中,要先判断root2,如果root2为空,则说明第二棵树遍历完了,即匹配成功。
# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def HasSubtree(self, pRoot1, pRoot2):
        # write code here
        if not pRoot1 or not pRoot2:
            return False
        return self.IsSubtree(pRoot1, pRoot2) or self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)
    
    def IsSubtree(self, tree1, tree2):
        if not tree2:
            return True
        if not tree1 and tree2:
            return False
        if tree1.val == tree2.val:
            return self.IsSubtree(tree1.left, tree2.left) and self.IsSubtree(tree1.right, tree2.right)
            

猜你喜欢

转载自blog.csdn.net/Dby_freedom/article/details/83239359