輸入兩棵二叉樹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)
劍指offer 樹的子結構
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 30 題目描述 輸入兩顆二叉樹a,b,判斷b是不是a的子結構。解析 解決樹類問題的時候遞迴是乙個很好的解決方案,並且寫的程式簡單,理解起來也很容易。遞迴的時候謝了乙個函式來判斷當前兩個根節點對應的子樹是否相等 issubtree 不想...
劍指offer 樹的子結構
題目描述 輸入兩顆二叉樹a,b,判斷b是不是a的子結構。這實際上二叉樹遍歷演算法的一種應用,要在原二叉樹中查詢是否具有某課子樹,只需要判斷每個節點是否都在二叉樹中是否出現即可。所以需要先判斷頭結點,只有頭結點符合要求才繼續比較其子樹是否符合,一樣依次從頭結點開始比較直到其左右子樹進行比較,如果都符合...
劍指offer 樹的子結構
大體思路如下 在程式遞迴過程中,記得注意遞迴的出口以及空指標的處理 主程式中在root1 root2非空的條件下才能去判斷 判斷judge函式中,一些邊界出口為 if root2 null return true if root1 null return false public class sol...