Again, this can be solved using many approaches both recursively or iteratively.
Approach 1: My recursive solution with complexity O(n) where n is the total number of TreeNodes in the tree is as follows:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) return true; if (root.left == null && root.right == null) return true; return isMirror (root.left, root.right); } private boolean isMirror(TreeNode r1, TreeNode r2) { if (r1 == null && r2 == null) return true; if ((r1 == null && r2 != null) || (r1 != null && r2 == null)) return false; if (r1.val != r2.val) return false; boolean mirror = isMirror(r1.left, r2.right); if (mirror) mirror = isMirror(r1.right, r2.left); return mirror; } }
Approach 2: An iterative solution approach making use of a BFS like queue insertion of node-pairs to check for equality when popped (again O(n)):
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) return true; if (root.left == null && root.right == null) return true; //iterative solution Queue<TreeNode> q = new LinkedList<>(); q.add(root.left); q.add(root.right); while(!q.isEmpty()) { TreeNode n1 = q.remove(); TreeNode n2 = q.remove(); if (n1 == null && n2 == null) continue; if ((n1 == null && n2 != null) || (n1 != null && n2 == null)) return false; if (n1.val != n2.val) return false; q.add(n1.left); q.add(n2.right); q.add(n1.right); q.add(n2.left); } return true; } }
That's not all! There are definitely more approaches to it. One which I can think of is using stacks. Feel free to share your solutions for the same.
As always, you can checkout my latest accepted solutions on leetcode at https://leetcode.com/chandniverma/ . All the best!
No comments:
Post a Comment