题解 | #对称的二叉树#

对称的二叉树

https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param pRoot TreeNode类
     * @return bool布尔型
     */
    public boolean isSymmetrical (TreeNode pRoot) {
        // write code here
        if (pRoot == null) {
            return true;
        }
        return isIter(pRoot);


    }
    private boolean isIter(TreeNode root) {
        if (root.right != null && root.left != null) {
            ArrayDeque<TreeNode> leftqueue = new ArrayDeque<>();
            leftqueue.addFirst(root.left);
            ArrayDeque<TreeNode> rightqueue = new ArrayDeque<>();
            rightqueue.addLast(root.right);
            while (!leftqueue.isEmpty() && !rightqueue.isEmpty()) {
                TreeNode left = leftqueue.pollFirst();

                TreeNode right = rightqueue.pollLast();
                System.out.println(left.val + " " + right.val);
                if (left == null && right == null) {
                    continue;
                }
                if (left == null || right == null || left.val != right.val) {
                    return false;
                }
                if (left.left != null && right.right != null) {
                    leftqueue.addFirst(left.left);
                    rightqueue.addLast(right.right);
                } else if (left.left == null && right.right == null) {

                } else {
                    return false;
                }
                if (left.right != null && right.left != null) {
                    leftqueue.addFirst(left.right);

                    rightqueue.addLast(right.left);
                } else if (left.right == null && right.left == null) {

                } else {
                    return false;
                }

                

            }
            return true;
        } else if (root.left == null && root.right == null) {
            return true;
        }
        return false;

    }

    private boolean isSame(TreeNode left, TreeNode right) {
        if (left == null && right == null) {
            return true;
        } else if (left != null && right != null) {
            if (left.val == right.val) {
                return isSame(left.left, right.right) && isSame(left.right, right.left);
            } else {
                return false;
            }
        } else {
            return false;
        }

    }
}

递归暂且不提,使用了队列主要是为了锻炼对java基层数据结构的使用。这次是使用了ArrayQueue, 一大缺点就是不能加入null值。

在示例中使用了LinkList可以加入null。

全部评论

相关推荐

03-26 15:18
已编辑
华北水利水电大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务