Leetcode: Symmetric Tree

来源:互联网 发布:嗅探 软件 编辑:程序博客网 时间:2024/06/05 15:01

给定一个树,判断是否为镜像对称。

/** * 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;    }}

类似于广度遍历,左边的子树从右向左遍历,右边的子树从左向右遍历,用两个队列来维护判断它们是否相等对称。

0 0