代码随想录算法训练营第十五天| 层序遍历 10 226.翻转二叉树 101.对称二叉树 2

102. Binary Tree Level Order Traversal

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        if(root == null){
            return res;
        }
        Queue<TreeNode> queue = new LinkedList<>();
      //先把头节点加进去
        queue.add(root);
        while(!queue.isEmpty()){
          //itemList用来存单层的数
            List<Integer> itemList = new ArrayList<>();
          //一个循环开始时队列的size就是该层元素的数量
            int size = queue.size();
            while( size > 0){
              //弹出一个node,用itemList记录
                TreeNode temp = queue.poll();
                itemList.add(temp.val);
                //同时把弹出的node的左右孩子加入队列
                if(temp.left != null){
                    queue.add(temp.left);
                }
                if(temp.right != null){
                    queue.add(temp.right);
                }
                size--;
            }
            res.add(itemList);
        }
        return res;
             
    }
}

226. Invert Binary Tree

  • 思路
    • DFS前序遍历递归
    • java
      class Solution {
          public TreeNode invertTree(TreeNode root) {
              if(root == null){
                  return root;
              }
              swap(root);
              invertTree(root.left);
              invertTree(root.right);
              return root;
          }
          
          
          
          private void swap(TreeNode root){
              TreeNode temp = root.left;
              root.left = root.right;
              root.right = temp;
          }
          
      }

 101. Symmetric Tree

  • 思路
    • 递归
      • 后续遍历比较
      • 先比较外侧
      • 在比较内测
      • java
        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;
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值