递归迭代双解法

判断二叉树是否对称

http://www.nowcoder.com/questionTerminal/1b0b7f371eae4204bc4a7570c84c2de1

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    public boolean isSymmetric (TreeNode root) {
        if(root == null) {
            return true;
        }
//         return isSymmetricRecursion(root.left, root.right);
        return isSymmetricIteration(root);
    }

    // 递归法
    private boolean isSymmetricRecursion(TreeNode nodeOne, TreeNode nodeTwo) {
        if(nodeOne == null && nodeTwo == null) {
            return true;
        }
        if(nodeOne == null || nodeTwo == null || nodeOne.val != nodeTwo.val) {
            return false;
        }
        return isSymmetricRecursion(nodeOne.left, nodeTwo.right) && isSymmetricRecursion(nodeOne.right, nodeTwo.left);
    }

    // 迭代法
    private boolean isSymmetricIteration(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList();
        queue.add(root.left);
        queue.add(root.right);
        while(!queue.isEmpty()) {
            TreeNode leftNode = queue.remove();
            TreeNode rightNode = queue.remove();
            if(leftNode == null && rightNode == null) {
                continue;
            }
            if(leftNode == null || rightNode == null || leftNode.val != rightNode.val) {
                return false;
            }
            queue.add(leftNode.left);
            queue.add(rightNode.right);
            queue.add(leftNode.right);
            queue.add(rightNode.left);
        }
        return true;
    }
}
全部评论

相关推荐

2025-12-17 12:08
门头沟学院 产品经理
牛客85811352...:1希音不知道算不算大厂 2完全符合,过得很舒服, 3确实只有杂活 领导找我续签到明年3、4月我要继续吗。主要是边实习边秋招这段时间还是有点累
什么是优秀的实习经历
点赞 评论 收藏
分享
2025-12-05 18:09
已编辑
广东药科大学 后端工程师
点赞 评论 收藏
分享
评论
3
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务