1.1、題目1
劍指 Offer 26. 樹的子結構
1.2、解法
這題看了解法,感嘆真的6,代碼量減了很多,
(A != null && B != null) && (recur(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B));
這一句實作了遍歷整個樹來尋找二叉樹,并,同時加上了判斷條件,
而recur函式中,則負責判斷兩個結點下的二叉樹是否相同,
當結點移到null的時候,就證明已經結束,并且目前所經過的值都相同,則回傳true
這題答案看了之后:“好像我也會,”
過幾天一看:“咋做來著,”
1.3、代碼
class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
return (A != null && B != null) && (recur(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B));
}
boolean recur(TreeNode A, TreeNode B) {
if(B == null) return true;
if(A == null || A.val != B.val) return false;
return recur(A.left, B.left) && recur(A.right, B.right);
}
}
2.1、題目2
劍指 Offer 27. 二叉樹的鏡像
2.2、解法
其實這幾行代碼還能再簡潔一點,因為left和right沒變,可以把交換放在下面,
但是你懂就好啦,hhhhh,這題就是遞回下去,
2.3、代碼
class Solution {
public TreeNode mirrorTree(TreeNode root) {
if(root==null) return null;
TreeNode left = root.left;
root.left=root.right;
root.right=left;
root.left=mirrorTree(root.left);
root.right=mirrorTree(root.right);
return root;
}
}
3.1、題目3
劍指 Offer 28. 對稱的二叉樹
3.2、解法
這題自定義函式RECUR,通過判斷null或者值不相同回傳false,遞回解決,
3.3、代碼
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSymmetric(TreeNode root) {
return root==null?true:recur(root.left,root.right);
}
boolean recur (TreeNode a,TreeNode b){
if(a==null && b==null) return true;
if(a==null || b==null ||a.val!=b.val) return false;
return recur(a.left,b.right) && recur(a.right,b.left);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/298207.html
標籤:Java
