/** * 輸入兩棵二叉樹A,B,判斷B是否是A的子結構。(ps:咱們約定空樹不是任意一個樹的子結構) * @author user * 思路:參考劍指offer一、首先設置標誌位result = false, * 由於一旦匹配成功result就設爲true,剩下的代碼不會執行, * 若是匹配不成功,默認返回false二、遞歸思想,若是根節點 * 相同則遞歸調用DoesTree1HaveTree2(),若是根節點不相 * 同,則判斷tree1的左子樹和tree2是否相同,再判斷右子樹和 * tree2是否相同三、注意null的條件,HasSubTree中,若是兩 * 棵樹都不爲空才進行判斷,DoesTree1HasTree2中,若是Tree2 * 爲空,則說明第二棵樹遍歷完了,即匹配成功,tree1爲空有兩種 * 狀況(1)若是tree1爲空&&tree2不爲空說明不匹配,(2)若是 * tree1爲空,tree2爲空,說明匹配。 */ public class ch17 { public boolean HasSubtree(TreeNode root1,TreeNode root2) { boolean result = false; if(root1 != null && root2 != null){ if(root1.val == root2.val){ result = DoesTree1HaveTree2(root1,root2); } if(!result){result = HasSubtree(root1.left, root2);} if(!result){result = HasSubtree(root1.right, root2);} } return result; } public boolean DoesTree1HaveTree2(TreeNode root1,TreeNode root2){ if(root1 == null && root2 != null) return false; if(root2 == null) return true; if(root1.val != root2.val) return false; return DoesTree1HaveTree2(root1.left, root2.left) && DoesTree1HaveTree2(root1.right, root2.right); } }