- 問題描述
請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。
- 解決方案
採用層次遍歷,注意空節點也要加入隊列,代碼如下:
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.LinkedList;
import java.util.ArrayList;
public class Solution {
boolean isSymmetrical(TreeNode pRoot)
{
if(pRoot == null)
return true;
LinkedList<TreeNode> list = new LinkedList<>();
list.addLast(pRoot);
while(list.size() > 0){
ArrayList<Integer> listVal = new ArrayList<>();
int len = list.size();
for(int i = 0; i < len;i ++){
TreeNode node = list.pollFirst();
if(node != null){
list.addLast(node.left);//無論左右子樹是否爲空,都要加入
list.addLast(node.right);
listVal.add(node.val);
}
else
listVal.add(null); //空節點也要加入null,起佔位作用
}
//雙指針判斷是否對稱
int l = 0;
int h = listVal.size() - 1;
while(l < h){
if(listVal.get(l) != listVal.get(h))
return false;
else{
l ++;
h --;
}
}
}
return true;
}
}