剑指offer之树的子结构(Python)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010636181/article/details/78261445

题目描述

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


思路:

考虑使用递归完成,一个函数嵌套递归判断是否匹配到起始节点;另写一个递归,判断左子树和右子树是否为子结构的函数。

1、 判断A当前节点开始,B是否为子结构,如果不是看下A的左子树节点,如果也不是再看下A的右子树。

2、如果是某节点开始A与B的起始节点重合:

①判断B是否匹配完了,如果匹配完了说明为子结构

②如果A匹配完了,或者A的值和B和值不等,直接返回False

③如果当前点相同,那同时看一下左子树和右子树的情况。

代码如下:

# -*- coding: utf-8 -*-
"""
题目描述:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
"""
class TreeNode():
    def __init__(self,x):
        self.val = x
        self.left = None
        self.right = None        
def HasSubtree(pRoot1,pRoot2):
    if not pRoot1 or pRoot2:
        return False
    return is_Subtree(pRoot1,pRoot2) or HasSubtree(pRoot1.left,pRoot2) or HasSubtree(pRoot1.right,pRoot2)
def is_Subtree(A,B):
    if not B:
        return True
    if not A or A.val != B.val:
        return False
    return is_Subtree(A.left,B.left) and is_Subtree(A.right,B.right)


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页