Symmetric Tree

Code link: https://leetcode.com/problems/symmetric-tree/

  1. Recursive solution
class Solution {
    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true;
        }
        
        return isSymmetricHelper(root.left, root.right);
    }
    
    private boolean isSymmetricHelper(TreeNode lNode, TreeNode rNode) {
        if (lNode == null && rNode == null) {
            return true;
        } else if ((lNode == null || rNode == null) || lNode.val != rNode.val) {
            return false;
        }
        
        return isSymmetricHelper(lNode.left, rNode.right) && isSymmetricHelper(lNode.right, rNode.left);
    }
}
class Solution {
    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true;
        }
        
        return isSymmetricHelper(root.left, root.right);
    }
    
    private boolean isSymmetricHelper(TreeNode lNode, TreeNode rNode) {
        if (lNode == null && rNode == null) {
            return true;
        } else if ((lNode == null || rNode == null) || lNode.val != rNode.val) {
            return false;
        }
        
        return isSymmetricHelper(lNode.left, rNode.right) && isSymmetricHelper(lNode.right, rNode.left);
    }
  • Time: O(n)
  • Space: O(n). The size of recursion stack could be equivalent to the number of nodes.
  1. Iterative solution using BFS
class Solution {
    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true;
        }
        
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root.left);
        queue.add(root.right);
        while (!queue.isEmpty()) {
            TreeNode lNode = queue.remove();
            TreeNode rNode = queue.remove();
            if (lNode == null && rNode == null) {
                continue;
            } else if ((lNode == null) ^ (rNode == null)) {
                return false;
            } else if (lNode.val != rNode.val) {
                return false;
            }
            
            queue.add(lNode.left);
            queue.add(rNode.right);
            queue.add(lNode.right);
            queue.add(rNode.left);
        }
        
        return true;
    }
}
  • Time: O(n);
  • Space: O(n);
posted on 2021-07-29 23:45  blackraven25  阅读(31)  评论(0)    收藏  举报