劍指offer——對稱的二叉樹判斷
阿新 • • 發佈:2019-02-04
題目描述:
請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。
思路:
想一下列印輸出某二叉樹的映象,實現的思路是:採用層序遍歷的思路對每一個遍歷的節點,如果其有孩子節點,那麼就交換兩者。直到遍歷的節點沒有孩子節點為止,然而此題是對二叉樹木映象的判斷,明顯是更簡單的,只需要進行兩個判斷:對節點的左孩子與其兄弟節點右孩子的判斷以及對節點右孩子與其兄弟節點左孩子的判斷。這樣就完成對對一棵二叉樹是否對稱的判斷。
程式碼實現:
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
boolean isSymmetrical(TreeNode pRoot)
{
if(pRoot==null)
return true;
return isSymmetricalCore(pRoot.left,pRoot.right);
}
private boolean isSymmetricalCore(TreeNode left,TreeNode right){
if (left == null && right == null) return true;
if (left == null || right == null) return false;
if (left.val == right.val)
return isSymmetricalCore(left.right, right.left)
&& isSymmetricalCore(left .left, right.right);
return false;
}
}