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

层序遍历

见上个笔记

翻转二叉树

226. 翻转二叉树
本题使用递归比较简单,还是递归的三步骤,递归终止条件、递归的参数和返回值、单次递归规则,注意递归时只能使用前序和后序遍历,如果是中序遍历的化,相等于有一边孩子节点没有处理

class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        // 交换根节点的左右孩子
        TreeNode tmp = root.right;
        root.right = root.left;
        root.left = tmp;

        invertTree(root.left);
        invertTree(root.right);
        return root;
    }
}

对称二叉树

101. 对称二叉树
将二叉树分为左右两棵子树,判断两棵子树能否翻转,使用递归的方式,比较left.left与right.right,以及left.right与right.left

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 false;
        }
        if (left == null && right == null) {
            return true;
        }
        if (left.val != right.val) {
            return false;
        }
        return compare(left.left, right.right) && compare(left.right, right.left);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容