101. Symmetric Tree

来源:互联网 发布:淘宝可可里小姐老板 编辑:程序博客网 时间:2024/05/20 04:49

题目:

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree is symmetric:

    1   / \  2   2 / \ / \3  4 4  3

But the following is not:

    1   / \  2   2   \   \   3    3

Note:
Bonus points if you could solve it both recursively and iteratively.

思路:

判断一棵树是否对称,除了根节点之外,需要比较兄弟节点A,B,A的左子树是否与B的右子树相同,A的右子树是否与B的左子树相同。


代码:

递归的方法:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    //递归的写法    public boolean isSymmetric(TreeNode root) {        if(root == null){return true;}        return judge(root.left, root.right);    }    public boolean judge(TreeNode root1, TreeNode root2){        boolean flag;        if(root1 == null && root2 == null){return true;}        if(root1 == null || root2 == null){return false;}        if(root1.val != root2.val){return false;}        return judge(root1.left,root2.right)&&judge(root1.right,root2.left);    }}


循环的方法:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {        //循环的写法    public boolean isSymmetric(TreeNode root) {        if(root == null){return true;}        Queue<TreeNode> queue1 = new LinkedList<>(), queue2 = new LinkedList<>();        queue1.add(root.left);        queue2.add(root.right);                while(!queue1.isEmpty() && !queue2.isEmpty()){            int size = queue1.size();            if(size != queue2.size()){return false;}            int i;            for(i = 0; i < size; i++){                TreeNode t1 = queue1.remove();                TreeNode t2 = queue2.remove();                                if(t1 == null && t2 == null){continue;}                if(t1 == null || t2 == null){return false;}                if(t1.val != t2.val){return false;}                                queue1.add(t1.left);                queue1.add(t1.right);                queue2.add(t2.right);                queue2.add(t2.left);                            }        }        return queue1.isEmpty() && queue2.isEmpty();    }}




0 0
原创粉丝点击