美文网首页
剑指Offer第17题-树的子结构

剑指Offer第17题-树的子结构

作者: Joseph_Chu | 来源:发表于2018-05-21 18:15 被阅读0次

题目

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

思路

什么是二叉树的子结构及子树?

  • 子树的意思是包含了一个结点,就得包含这个结点下的所有节点,一棵大小为n的二叉树有n个子树,就是分别以每个结点为根的子树。
  • 子结构的意思是包含了一个结点,可以只取左子树或者右子树,或者都不取。

基本思想是递归
我们首先判断A, B是否为空,若有任何一个为空,则直接返回False。
然后判断A, B两个节点的值是否相同,如果不相同,就可以直接返回False。
如果相同,再判断A的左子树和B的左子树,A的右子树和B的右子树是否有相同的值,若B没有对应的子树就可以直接返回True。

代码

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def is_subtree(self, pRoot1, pRoot2):
        if not pRoot2: return True
        if not pRoot1: return False
        if pRoot1.val == pRoot2.val:
            return self.is_subtree(pRoot1.left, pRoot2.left) and \
                   self.is_subtree(pRoot1.right, pRoot2.right)
        else: return False
    def HasSubtree(self, pRoot1, pRoot2):
        # write code here
        if (not pRoot1) or (not pRoot2): return False
        return self.is_subtree(pRoot1, pRoot2) or \
               self.HasSubtree(pRoot1.left, pRoot2) or \
               self.HasSubtree(pRoot1.right, pRoot2)

代码翻译自牛客网某大牛的C++代码
用到了 短路特性 这一技巧

  • 逻辑运算符的短路特性(以java为例)
  1. &&的短路特性: 因为程序从左往右执行的,当判断左边为false时&&的返回结果就已经注定是false , 所以后面的判断计算机就不执行了
  2. || 的短路特性:因为程序是从左往右执行,当判断左边为true时 返回结果就已经注定是 true, 所以后面的判断计算机不执行

参考

相关文章

  • 剑指Offer第17题-树的子结构

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

  • 剑指Offer - 17 - 树的子结构

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

  • 剑指 Offer 第26题:树的子结构

    1、前言 2、思路 很朴素的思路,就是先比较 A 和 B 节点,然后再比 A.left 和 B、以及 A.righ...

  • 剑指offer编程题—树的子结构

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

  • 面试题26: 树的子树

    剑指offer中原题是"树的子结构", 也就是只要子树B是树A的一部分就可以;我实际做的这道题是leetcode上...

  • 剑指Offer--(5)重建二叉树

    title: 剑指Offer--(5)重建二叉树 categories: 算法与数据结构 tags: 数据结构 题...

  • 2022-04-30

    剑指 Offer 26. 树的子结构[https://leetcode.cn/problems/shu-de-zi...

  • 《剑指offer》— JavaScript(17)树的子结构

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

  • 剑指 offer 笔记 17 | 树的子结构

    题目分析输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路分析 这道...

  • [剑指offer] 树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解题思路 递...

网友评论

      本文标题:剑指Offer第17题-树的子结构

      本文链接:https://www.haomeiwen.com/subject/udsqjftx.html