第一次接觸二叉樹的遞迴型別的題目。 一般對於這種題目,我們需要做的是:1. 寫乙個遞迴方法。 2. 在主方法裡呼叫這個遞迴方法。
對於遞迴方法,我們可以分為兩部分 ——1. 基本情況 2. 特殊情況。基本情況實際上就是遞迴的退出條件,而特殊情況就是進行遞迴。 對於這個題目,我們會寫乙個check(treenode a,treenode b)的遞迴方法,它的主要作用就是判斷 b結點是否為a結點的子結構。
那麼我們先分析一下基本情況:1. 如果b結點為 null,那麼它最起碼不會干擾最終結果,因此返回 true,這種情況已經包含了 b==null&&a==null的情況。 2. 如果a結點為null而b結點不為null,那麼肯定返回 false。3. 如果a結點的 val 與 b結點的 val 不相等,那麼返回 false。
我們再分析一下特殊情況:也就是還無法判斷b是否為a結點的子結構,說明 a.val == b.val,那麼我們接下來要做的就是,判斷b的左右子節點是不是a的左右子節點 的子結構。這時候我們就要進行遞迴呼叫:呼叫 check(a.left,b.left) 和 check(a.right,b.right)。並返回兩者的結果。
public首先我們在主方法裡要把特殊情況先寫出來,也即 a==null || b==null 時,返回false。然後我們就需要考慮:我們應該怎麼樣呼叫遞迴方法。首先我們可以呼叫 check(a,b),來檢視b是否為a的子結構。但是問題是,b有可能是a的左子樹的子結構,或者a的右子樹的子結構,因此我們不能單單從 check(a,b)的結果就判斷b是否為a的子結構。我們還需要判斷 b是否為a的左子樹/右子樹的子結構,因此我們還需要遞迴呼叫主方法。boolean
check(treenode a, treenode b)
if(a==null||a.val!=b.val)
//特殊情況,遞迴,檢視左子樹和右子樹是否構成子結構
return check(a.left,b.left)&&check(a.right,b.right);
}
publicboolean
issubstructure(treenode a, treenode b)
//遞迴呼叫主方法,檢視是否為左右子樹的子結構(只要滿足一種情況即可)
劍指 offer 28. 對稱的二叉樹 基本思路和上面一致。
遞迴方法是 judge(treenode left,treenode right),用於判斷兩個結點是否是對稱的。基本情況:1. left==null && right==null,不影響是否對稱,返回 true。2. left==null || right==null || left.val != right.val ,說明left和right是不對稱的,返回 false。 特殊情況:left.val == right.val,此時還不能判斷是否對稱,要繼續判斷子樹,也就是 judge(left.left,right.right) && judge(left.right,right.left)。
public判斷完特殊情況後,直接呼叫遞迴方法即可。與上面的題不同的地方在於,我們不需要遞迴呼叫主方法,因為對稱是從根節點開始的,如果題目說某個子樹對稱,那麼我們還需要遞迴呼叫。boolean
judge(treenode left,treenode right)
if(left==null||right==null||left.val!=right.val)
return judge(left.left,right.right)&&judge(left.right,right.left);
}
publicboolean
issymmetric(treenode root)
return
judge(root.left,root.right);
}
劍指offer26 樹的子結構
輸入兩棵二叉樹a和b,判斷b是不是a的子結構。約定空樹不是任意乙個樹的子結構 b是a的子結構,即 a中有出現和b相同的結構和節點值。例如 給定的樹 a 3 4 5 1 2 給定的樹 b 4 1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。示例 1 輸入 a 1,2,3 b 3,...
劍指 Offer 26 樹的子結構
輸入兩棵二叉樹a和b,判斷b是不是a的子結構。約定空樹不是任意乙個樹的子結構 b是a的子結構,即 a中有出現和b相同的結構和節點值。例如 給定的樹 a 3 4 5 1 2 給定的樹 b 4 1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。示例 1 輸入 a 1,2,3 b 3,...
劍指 Offer 26 樹的子結構
輸入兩棵二叉樹a和b,判斷b是不是a的子結構。約定空樹不是任意乙個樹的子結構 b是a的子結構,即 a中有出現和b相同的結構和節點值。例如 給定的樹 a 3 4 5 1 2 給定的樹 b 4 1返回 true,因為 b 與 a 的乙個子樹擁有相同的結構和節點值。definition for a bin...