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

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



一、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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值