劍指offer之樹的子結構(Python)__Python

來源:互聯網
上載者:User
題目描述

輸入兩棵二叉樹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)


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.