代码随想录算法训练营Day15| 二叉树part02

代码随想录算法训练营Day15| 二叉树part02


文章目录

  • 代码随想录算法训练营Day15| 二叉树part02
  • 一、102. 二叉树的层序遍历
  • 二、226. 翻转二叉树
  • 三、101. 对称二叉树


一、102. 二叉树的层序遍历

用迭代的方式写比较容易理解

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
   
   List<List<Integer>> resList = new ArrayList<List<Integer>>();
   //返回二维数组
   if(root!=null){
        Queue<TreeNode> queue=new LinkedList<TreeNode>();
        queue.offer(root);//先把根节点压进去
        while(!queue.isEmpty()){
            List<Integer> tempList=new ArrayList<Integer>();
            int size=queue.size();//size是在变化的要用变量来接它
            //且是根据队列的大小来定size,表示每一层的节点数量
            while(size-->0){
                TreeNode node=queue.poll();
                tempList.add(node.val);
                if(node.left!=null)queue.offer(node.left);
                if(node.right!=null)queue.offer(node.right);
                //这两个if就是在把每个结点的子节点放到队列里面,获取每一层的子节点,从而可以获得当前层级的子节点的size
            }
            resList.add(tempList);
            //把每一层的节点数放到一个临时的一维数组中
        }
        return resList;//返回二维数组
    
    }
    return resList;
    }
}

二、226. 翻转二叉树

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode invertTree(TreeNode root) {
        if(root==null){
            return null;
        }
        swapNode(root);
        invertTree(root.left);
        invertTree(root.right);
       
        return root;
    }
    public void swapNode(TreeNode root){
        TreeNode tempNode=root.left;
        root.left=root.right;
        root.right=tempNode;

    }
}

三、101. 对称二叉树

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
         return compare(root.left,root.right);
    }
    public boolean compare(TreeNode left,TreeNode right){
        if (left == null && right == null) {
            return true;
        }
       if(left==null&&right!=null){return false;}
       if(left!=null&&right==null){return false;}
       if(left.val!=right.val) {return false;}
      
        

       //外侧
        boolean compareOut=compare(left.left,right.right);
        //内侧
        boolean compareInside=compare(left.right,right.left);
        return compareOut&&compareInside;
    }
}

你可能感兴趣的:(代码随想录打卡,算法,java,数据结构)