題目:
輸入兩棵二叉樹a,b,判斷b是不是a的子結構。(ps:我們約定空樹不是任意乙個樹的子結構)
解析:
利用遞迴
如果a為空或者b為空,則返回false;
否則判斷三種情況,其一成立則返回true:
(1)b是a的子樹;
(2)b是 a的左子樹 的子樹;
(3)b是 a的右子樹 的子樹;
判斷b是不是a的子樹的方法:
若b為空,則b為a的子樹;
若b不空a為空 或者 a結點的值與b結點的值不相等,則b不是a的子樹;
若b不空a不空,且 a結點的值等於b結點的值,則判斷1)2):
若兩個條件皆成立,則b為a的子樹:否則b不是a的子樹
1)b的左子樹 是不是 a的左子樹 的子樹;
2)b的右子樹 是不是 a的右子樹 的子樹;
解答:
# -*- 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
ifnot proot1 or
not proot2:
return
false
else
:return solution(
).issubtree(proot1,proot2)
or solution(
).hassubtree(proot1.left,proot2)
or solution(
).hassubtree(proot1.right,proot2)
defissubtree
(self,a,b):if
not b:
return
true
ifnot a or a.val!=b.val:
return
false
return solution(
).issubtree(a.left,b.left)
and solution(
).issubtree(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...