您的位置:首页 > 其它

[leetcode]Symmetric Tree

2013-08-08 23:32 260 查看
有意思的是还要写非递归版本。

这是递归版本:

public class Solution {
public boolean isSymmetric(TreeNode root) {
// Start typing your Java solution below
// DO NOT write main() function
if (root == null) return true;
return (isMirror(root.left, root.right));
}

public boolean isMirror(TreeNode p, TreeNode q) {
if (p == null && q == null) return true;
if (p != null && q != null &&
q.val == p.val &&
isMirror(p.left, q.right) &&
isMirror(p.right, q.left)) {
return true;
}

return false;
}
}


非递归版本。

public class Solution {
public boolean isSymmetric(TreeNode root) {
// Start typing your Java solution below
// DO NOT write main() function

if (root == null) return true;
if (root.left == null && root.right == null) return true;
if (root.left == null || root.right == null) return false;

LinkedList<TreeNode> lq = new LinkedList<TreeNode>();
LinkedList<TreeNode> rq = new LinkedList<TreeNode>();

lq.offer(root.left);
rq.offer(root.right);

while (lq.size() != 0 && rq.size() != 0) {
TreeNode ln = lq.poll();
TreeNode rn = rq.poll();

if (ln == null && rn == null) continue;
if (ln == null || rn == null) return false;
if (ln.val != rn.val) return false;

lq.offer(ln.left);
lq.offer(ln.right);
rq.offer(rn.right);
rq.offer(rn.left);
}

return true;
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: