[LeetCode]Symmetric Tree

第一个是递归方法,第二个是非递归方法

public class Solution {
    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true;
        }
        return helper(root.left, root.right);
    }
    public boolean helper(TreeNode n1, TreeNode n2) {
        if (n1 == null && n2 == null) {
            return true;
        }
        if (n1 == null || n2 == null) {
            return false;
        }
        if (n1.val != n2.val) {
            return false;
        }
        return helper(n1.left, n2.right) && helper(n1.right, n2.left);
    }
}
public class Solution {
    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true;
        }
        Stack<TreeNode> stack1 = new Stack<TreeNode>();
        Stack<TreeNode> stack2 = new Stack<TreeNode>();
        TreeNode p1 = root;
        TreeNode p2 = root;
        while (p1 != null && p2 != null) {
            stack1.push(p1);
            stack2.push(p2);
            p1 = p1.left;
            p2 = p2.right;
        }
        if (p1 != null || p2 != null) {
            return false;
        }
        while (!stack1.isEmpty() && !stack2.isEmpty()) {
            p1 = stack1.pop();
            p2 = stack2.pop();
            if (p1.val != p2.val) {
                return false;
            }
            if (p1.right != null && p2.left != null) {
                p1 = p1.right;
                p2 = p2.left;
            } else if (p1.right != null || p2.left != null) {
                return false;
            } else {
                p1 = null;
                p2 = null;
            }
            while (p1 != null && p2 != null) {
                stack1.push(p1);
                stack2.push(p2);
                p1 = p1.left;
                p2 = p2.right;
            }
            if (p1 != null || p2 != null) {
                return false;
            }
        }
        return stack1.isEmpty() && stack2.isEmpty();
    }
}

 

posted @ 2015-12-04 07:26  Weizheng_Love_Coding  阅读(113)  评论(0)    收藏  举报