黑马程序员技术交流社区

标题: 检查一个树是否对称的方法 [打印本页]

作者: kangnam    时间: 2016-9-13 23:09
标题: 检查一个树是否对称的方法
    1   / \  2   2 / \ / \3  4 4  3public boolean isSymmetric(TreeNode root) {    Queue<TreeNode> q = new LinkedList<>();    q.add(root);    q.add(root);    while (!q.isEmpty()) {        TreeNode t1 = q.poll();        TreeNode t2 = q.poll();        if (t1 == null && t2 == null) continue;        if (t1 == null || t2 == null) return false;        if (t1.val != t2.val) return false;        q.add(t1.left);        q.add(t2.right);        q.add(t1.right);        q.add(t2.left);    }    return true;}public boolean isSymmetric(TreeNode root) {    return isMirror(root, root);}public boolean isMirror(TreeNode t1, TreeNode t2) {    if (t1 == null && t2 == null) return true;    if (t1 == null || t2 == null) return false;    return (t1.val == t2.val)        && isMirror(t1.right, t2.left)        && isMirror(t1.left, t2.right);}

作者: kangnam    时间: 2016-9-13 23:11
方法一:
public boolean isSymmetric(TreeNode root) {
    return isMirror(root, root);
}

public boolean isMirror(TreeNode t1, TreeNode t2) {
    if (t1 == null && t2 == null) return true;
    if (t1 == null || t2 == null) return false;
    return (t1.val == t2.val)
        && isMirror(t1.right, t2.left)
        && isMirror(t1.left, t2.right);
}

方法二:
public boolean isSymmetric(TreeNode root) {
    Queue<TreeNode> q = new LinkedList<>();
    q.add(root);
    q.add(root);
    while (!q.isEmpty()) {
        TreeNode t1 = q.poll();
        TreeNode t2 = q.poll();
        if (t1 == null && t2 == null) continue;
        if (t1 == null || t2 == null) return false;
        if (t1.val != t2.val) return false;
        q.add(t1.left);
        q.add(t2.right);
        q.add(t1.right);
        q.add(t2.left);
    }
    return true;
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2