您的位置:首页 > 其它

Leetcode: Symmetric Tree

2016-09-18 20:54 281 查看
给定一个树,判断是否为镜像对称。

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.*;
public class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null){
return true;
}
List<TreeNode> leftlist = new ArrayList<TreeNode>(); //左List记录root左边的广度遍历
List<TreeNode> rightlist = new ArrayList<TreeNode>(); //右list记录root右边的广度遍历
leftlist.add(root.left);
rightlist.add(root.right);
while(leftlist.size() != 0 ){
if((leftlist.get(0) == null) ^ (rightlist.get(0) == null) ){ //是否一个为空一个不为空
return false;
}
if(leftlist.get(0) != rightlist.get(0) ){ //左右都不为null
if(leftlist.get(0).val != rightlist.get(0).val ){
return false;
}
leftlist.add(leftlist.get(0).right );
leftlist.add(leftlist.get(0).left );
rightlist.add(rightlist.get(0).left );
rightlist.add(rightlist.get(0).right );

}
leftlist.remove(0);
rightlist.remove(0);
}
return true;
}
}

类似于广度遍历,左边的子树从右向左遍历,右边的子树从左向右遍历,用两个队列来维护判断它们是否相等对称。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode