题解 | #对称的二叉树#

对称的二叉树

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;
        }
        List<List<Integer>> list = new ArrayList();
        levelIterator(pRoot,1,list);
        System.out.println(list);

        for(int i=0;i<list.size();i++) {
            List<Integer> levelList = list.get(i);
            // 对某层数组进行反转
            List<Integer> reverseList = new ArrayList<Integer>();
            reverseList.addAll(levelList);
            Collections.reverse(reverseList);
            // 原数组和反转后的数组通过toString是否相同判断该层是否对称
            if(!levelList.toString().equals(reverseList.toString())) {
                return false;
            }
        }
        
        return true;
    }

    // 层序遍历 返回[[第一层列表],[第二层列表],...],需要注意的是:如果左右子节点中若仅其中一个为null,需要再创建一个临时节点,节点值为-1,这么做是为了后面对某一层是否对称判断用的。
    public void levelIterator(TreeNode node,int level,List<List<Integer>> list) {
        // level 从1开始
        List<Integer> levelList = new ArrayList<Integer>();
        if(list.size() < level) {
            list.add(levelList);
        } else {
            levelList = list.get(level - 1);
        }
        levelList.add(node.val);
        if(node.left != null && node.right != null) {
            levelIterator(node.left,level + 1,list);
            levelIterator(node.right,level + 1,list);
        }
        if(node.left != null && node.right == null) {
            levelIterator(node.left,level + 1,list);
            node.right = new TreeNode(-1);
            levelIterator(node.right,level + 1,list);
        }
        if(node.left == null && node.right != null) {
            node.left = new TreeNode(-1);
            levelIterator(node.left,level + 1,list);
            
            levelIterator(node.right,level + 1,list);
        }

        if(node.left == null && node.right == null) {
            
        }
    }







}

全部评论

相关推荐

投递恒生电子股份有限公司等公司7个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务