码迷,mamicode.com
首页 > 其他好文 > 详细

Symmetric Tree

时间:2014-06-08 18:12:04      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:leetcode      层次遍历   递归   java   

题目

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.



方法一

根据层次遍历的思想.
首先初始化队列,使用根节点的左右节点。
每次取出来两个元素,进行判断。然后,放入两对元素,leftNode.left和rightNode.right  以及 leftNode.right 和 rightNode.left.
    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true;
        } 
        if (root.left == null && root.right == null) {
            return true;    
        }
        if (root.left == null || root.right == null) {
            return false;
        }
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root.left);
        queue.offer(root.right);
        while(!queue.isEmpty()) {
            int len = queue.size()/2;
            for (int i = 0; i < len; i++) {
                TreeNode leftNode = queue.poll();
                TreeNode rightNode = queue.poll();
                if (leftNode.val == rightNode.val) {
                    if (!(leftNode.left == null && rightNode.right == null)) {
                        if (leftNode.left == null || rightNode.right == null) {
                            return false;
                        } else {
                            queue.offer(leftNode.left);
                            queue.offer(rightNode.right);
                        }
                    }
                    if (!(leftNode.right == null && rightNode.left == null)) {
                        if (leftNode.right == null || rightNode.left == null) {
                            return false;
                        } else {
                            queue.offer(leftNode.right);
                            queue.offer(rightNode.left);
                        }
                    }
                } else {
                    return false;
                }
            }
        }
        return true;
    }


方法二

使用递归。
    private boolean sym(TreeNode leftNode, TreeNode rightNode) {
        if (leftNode == null && rightNode == null) {
            return true;
        }
        if (leftNode == null || rightNode == null) {
            return false;
        }
        if (leftNode.val == rightNode.val) {
            return sym(leftNode.left, rightNode.right) && sym(leftNode.right, rightNode.left);
        } else {
            return false;
        }
    }
    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true;
        } 
        return sym(root.left, root.right);
        
    }



Symmetric Tree,布布扣,bubuko.com

Symmetric Tree

标签:leetcode      层次遍历   递归   java   

原文地址:http://blog.csdn.net/u010378705/article/details/28633563

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!