Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
From http://rangercyh.blog.51cto.com/1444712/1306485用了更加明确的方法,用两个栈,左栈保存根节点的左孩子,右栈保存根节点的右孩子,每次从两个栈中取出一个值,然后比较,如果不同则返回false,如果相同则把从左栈中取出的节点的左孩子和右孩子放进左栈;相对的,把右栈中取出的节点的右孩子和左孩子放进右栈。要注意的是左栈取出的节点放孩子的顺序是先左后右,右栈则是先右后左。
From http://gongxuns.blogspot.com/2012/12/leetcodesymmetric-tree.html
public boolean isSymmetric(TreeNode root) { // Start typing your Java solution below // DO NOT write main() function if(root==null) return true; LinkedList<TreeNode> l = new LinkedList<TreeNode>(), r = new LinkedList<TreeNode>(); l.add(root.left); r.add(root.right); while(!l.isEmpty() && !r.isEmpty()){ TreeNode temp1=l.poll(), temp2=r.poll(); if(temp1==null && temp2!=null || temp1!=null && temp2==null) return false; if(temp1!=null){ if(temp1.val!=temp2.val) return false; l.add(temp1.left); l.add(temp1.right); r.add(temp2.right); r.add(temp2.left); } } return true; }Recursive Version:
bool isSymmetric(TreeNode *root)
{
if (!root) return true;
return isSymmetric(root->left, root->right);
}
bool isSymmetric(TreeNode *lt, TreeNode *rt)
{
if (!lt && !rt) return true;
if (lt && !rt || !lt && rt || lt->val != rt->val) return false;
return isSymmetric(lt->left, rt->right) &&isSymmetric(lt->right, rt->left);
}
Also refer to: http://rangercyh.blog.51cto.com/1444712/1306485
Read full article from Yu's Coding Garden : leetcode Question 109: Symmetric Tree
No comments:
Post a Comment