給你兩棵二叉樹?root
?和?subRoot
?。檢驗?root
?中是否包含和?subRoot
?具有相同結構和節點值的子樹。如果存在,返回?true
?;否則,返回?false
?。
二叉樹?tree
?的一棵子樹包括?tree
?的某個節點和這個節點的所有后代節點。tree
?也可以看做它自身的一棵子樹。
思路:用兩個遞歸,第一個遞歸,在root樹中尋找與subRoot根節點相等的點,如果找不到就接著找;第二個遞歸,比較兩個樹是否相等。(Leetcode100)
public static boolean isSubtree(TreeNode root, TreeNode subRoot) {return search(root,subRoot);}//找到兩棵樹的根節點比較(本質上是找子樹的根節點)public static boolean search(TreeNode root,TreeNode subRoot){if(root==null) return false;//如果相等,則返回trueboolean res=compare(root,subRoot);if(res) return true;//不相等,分別判斷root的左右子樹是否與subRoot相等boolean left=search(root.left,subRoot);if(left) return true;boolean right=search(root.right,subRoot);if(right) return true;return false;}//比較兩顆樹p、q是否相等public static boolean compare(TreeNode p, TreeNode q) {//先判斷為空的情況if(p==null && q!=null){return false;}else if(p!=null && q==null){return false;}else if(p==null && q==null){return true;}else if(p.val!=q.val){ //不為空的情況return false;}boolean l=compare(p.left,q.left);boolean r=compare(p.right,q.right);return l&&r;}