算法训练 Day 15 | 二叉树:102. 二叉树的层序遍历,226.翻转二叉树,101.对称二叉树 2

本文介绍了三种二叉树操作的解决方案:层序遍历、翻转和判断对称。通过队列实现层序遍历,递归翻转二叉树节点,以及双指针检查对称性。每种方法都提供了清晰的代码实现和问题解决思路,用时均为10分钟。

102. 二叉树的层序遍历

102. 二叉树的层序遍历

  •  第一想法:使用队列,按层遍历二叉树元素
  • 看到题解想法:同上
  • 遇到困难:由于队列queue在每层循环的长度会变化,需要用size来存队列的长度
 public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<TreeNode>();

        if (root == null) return res;
        queue.offer(root);

        while (!queue.isEmpty()) {
            int size = queue.size();
            List<Integer> subList = new ArrayList<>();
            for (int i = 0; i < size; i++) {
                TreeNode n = queue.poll();
                subList.add(n.val);
                if (n.left != null) queue.offer(n.left);
                if (n.right != null) queue.offer(n.right);
            }
            res.add(subList);
        }
        return res;
    }
  • 总结与收获:以前刷过,还记得,用时10min

226.翻转二叉树

226. 翻转二叉树

  •  第一想法:使用前序遍历二叉树,反转左右子树
  • 看到题解想法:同上
  • 遇到困难:暂无
 public TreeNode invertTree(TreeNode root) {
        traverse(root);
        return root;
    }
    public void traverse(TreeNode n) {
        if (n == null) return;

        TreeNode tmp = n.left;

        n.left = n.right;
        n.right = tmp;

        traverse(n.left);
        traverse(n.right);
    }
  • 总结与收获:用时10min

101.对称二叉树 2  

101. 对称二叉树

  • 第一想法:用2个指针指向左右节点,并对称遍历
  • 看到题解想法:同上
  • 遇到困难:终止条件需要明确
 public boolean isSymmetric(TreeNode root) {
        return traverse(root.left, root.right);
    }

    public boolean traverse(TreeNode n1, TreeNode n2) {
        // 遍历到子树末尾,为对称
        if (n1 == null && n2 == null) return true;
        // 左右子树其中一边是null
        if ((n1 == null && n2 != null) || (n1 != null && n2 == null)) return false;
        // 左右子树节点不一样
        if (n1.val != n2.val) {
            return false;
        } 
        return traverse(n1.left, n2.right) && traverse(n1.right, n2.left);
    }
  • 总结与收获:用时10min

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值