題目:
請實現(xiàn)一個函數(shù),用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其為對稱的。
思路:
對稱的特性就是當前節(jié)點的左子節(jié)點和右子節(jié)點一定是相等的,左子節(jié)點的左右節(jié)點和右子節(jié)點左右節(jié)點對稱相等.
代碼:
public class IsSymmetrical
{
/**
* 1.對稱的特稱當前節(jié)點的左右節(jié)點相同,左右節(jié)點的子節(jié)點相互對稱
* @param pRoot
* @return
*/
public boolean isSymmetrical(TreeNode pRoot){
if(pRoot == null)
return false;
return isSymmetrical(pRoot.left,pRoot.right);
}
private boolean isSymmetrical(TreeNode left,TreeNode right){
//如果兩個左右節(jié)點同時為空,返回true
if(left==null && right==null){
return true;
}
//如果兩個節(jié)點一個為空一個不為空返回false
//代碼到了這個階段說明左右子樹同時為空的可能性已經(jīng)判斷完了
//如果一方出現(xiàn)null,直接返回false
if(left==null || right==null){
return false;
}
//如果當個節(jié)點值相等且子節(jié)點成對稱形狀,返回true
return (left.val == right.val) &&
isSymmetrical(left.left,left.right) &&
isSymmetrical(left.right,left.left);
}
}