Skip to content

Instantly share code, notes, and snippets.

@b27lu
Created February 13, 2014 17:32
Show Gist options
  • Save b27lu/8979885 to your computer and use it in GitHub Desktop.
Save b27lu/8979885 to your computer and use it in GitHub Desktop.
iteratively solution of Symmetric Tree at LeetCode
/**
* Definition for binary tree
* 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 || (root.left == null && root.right == null))
return true;
Queue<TreeNode> lq = new LinkedList<TreeNode>();
Queue<TreeNode> rq = new LinkedList<TreeNode>();
lq.add(root.left);
rq.add(root.right);
TreeNode leftTemp = null;
TreeNode rightTemp = null;
while(lq.isEmpty() == false && rq.isEmpty() == false){
leftTemp = lq.poll();
rightTemp = rq.poll();
if(leftTemp == null && rightTemp == null)
continue;
if((leftTemp == null && rightTemp != null) || (leftTemp != null && rightTemp == null))
return false;
if(leftTemp.val != rightTemp.val)
return false;
//take care of the order when adding left and right child to left and right queue
lq.add(leftTemp.left);
lq.add(leftTemp.right);
rq.add(rightTemp.right);
rq.add(rightTemp.left);
}
//since the left and right always have same size, at here both of them are empty
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment