题目要求:
101. Symmetric Tree
- Total Accepted: 121475
- Total Submissions: 346144
- Difficulty: Easy
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3]
is symmetric:
1 / \ 2 2 / \ / \ 3 4 4 3
But the following [1,2,2,null,3,null,3]
is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
Subscribe to see which companies asked this question
我的实现代码:
public boolean isSymmetric(TreeNode root) {
if(root==null){return true;}
Queue<TreeNode> que=new LinkedList<TreeNode>();
que.add(root);
while(!que.isEmpty()){
int index=que.size();
LinkedList<TreeNode> templist=new LinkedList<TreeNode>();
for(int i=0;i<index;i++){
TreeNode temp=que.poll();
templist.add(temp);
if(temp!=null){que.add(temp.left);que.add(temp.right);}
}
if(!ListIsSymmetric(templist))
{return false;}
}
return true;
}
public boolean ListIsSymmetric(LinkedList<TreeNode> templist){
int len=templist.size();
int i=0;int j=len-1;
while(i<=j){
if(templist.get(i)==null){
if(templist.get(j)!=null){return false;}
else{i++;j--;}
}
else {
if(templist.get(j)==null){return false;}
else {
if(templist.get(i).val==templist.get(j).val){i++;j--;}
else{return false;}
}
}
}
return true;
}
基本思路,类似于广度优先搜索,将每一层的节点加入到队列中,并且将本层所有节点进行双向匹配,查看是否对称,注意在进入队列的元素中需要有
null值,用来正确的对应 树的结构。