102.二叉树层序遍历226.翻转二叉树101.对称二叉树

275 阅读1分钟

102.二叉树层序遍历

class Solution {
    //储存最终结果的容器哥哥
    public List<List<Integer>> ultimate1 = new ArrayList<List<Integer>>();
    public List<List<Integer>> levelOrder(TreeNode root) {
        function(root);
        return ultimate1;
    }
    public void function(TreeNode node) {
        if(node == null) return;
        //每层节点的临时容器,用来统计每层结点个数
        Queue<TreeNode> que = new LinkedList<TreeNode>();
        que.offer(node);
        while(!que.isEmpty()){
            //储存最终结果的容器弟弟,将其传送给他的哥哥
            List<Integer> ultimate2 = new ArrayList<Integer>();
            int len = que.size();
            //确保每次都将一整层都交给弟弟,不多也不少
            while(len-- > 0){
                //临时储存每次的父节点
                TreeNode temp = que.poll();
                ultimate2.add(temp.val);
                if(temp.left != null) que.offer(temp.left);
                if(temp.right != null) que.offer(temp.right);
            }
            ultimate1.add(ultimate2);             
        }        
    }
}

226.翻转二叉树

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root == null) return null;
        //定位左孩子和右孩子,然后再告诉他们的妈妈给他们做交换
        invertTree(root.left);
        invertTree(root.right);
        swap(root);
        return root;
    }
    private void swap(TreeNode root){
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
    }
}

101.对称二叉树

class Solution {
    public boolean isSymmetric(TreeNode root) {
        return compare(root.left,root.right);
    }
    private boolean compare(TreeNode left,TreeNode right){
        if(left == null && right != null) return false;
        if(left != null && right == null) return false;
        if(left == null && right == null) return true;
        if(left.val != right.val) return false;
        boolean compareOutside = compare(left.left,right.right);
        boolean compareInside = compare(left.right,right.left);
        return compareOutside && compareInside;
    }
}