- 问题描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
- 解决方案
采用层次遍历,注意空节点也要加入队列,代码如下:
/*
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;
}
}