題目描述:
請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。
思路:
示例圖是對稱的。(左代表左孩子,右代表右孩子) 節點1的左與右; 節點1的左左與右右;節點1的左右與右左。可以看出作鏡像的位置是相反的。
代碼:
package offer01;
import offer.TestNo2;
public class TestNo58 {
static class TreeNode{
int val = 0;
TreeNode left = null;
TreeNode right = null;
TreeNode(int val){
this.val = val;
}
}
public static void main(String[] args) {
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(2);
TreeNode node4 = new TreeNode(3);
TreeNode node5 = new TreeNode(4);
TreeNode node6 = new TreeNode(4);
TreeNode node7 = new TreeNode(3);
node1.left = node2;
node1.right = node3;
node2.left = node4;
node2.right = node5;
node3.left = node6;
node3.right = node7;
System.out.println(new TestNo58().isSymmetrical(node1));
}
boolean isSymmetrical(TreeNode pRoot)
{
if(pRoot == null)
return true;//根節點是null時,認爲是對稱二叉樹
return isEqual(pRoot.left,pRoot.right);//判斷左右子樹
}
private boolean isEqual(TreeNode pRoot1,TreeNode pRoot2){
if(pRoot1 == null && pRoot2 == null){
return true;
}
if(pRoot1 == null || pRoot2 == null){
return false;
}
return pRoot1.val == pRoot2.val
&& isEqual(pRoot1.left,pRoot2.right)
&& isEqual(pRoot1.right,pRoot2.left);
}
}