对称二叉树

算法学习12(题解)

本人博客

声明:本文为转载文章,仅用来学习交流,详情见文末

1.题目

给你一个二叉树的根节点root, 检查它是否轴对称。

2.实例

请添加图片描述

实例一

输入:root = [1,2,2,3,4,4,3]
输出:true

实列二

输入:root = [1,2,2,null,3,null,3]
输出:false

3.思路

递归解决

判断二叉树是否是对称,需要从子节点开始比较,两个子节点的值必须相同,并且左子节点的右子节点(如果有)必须等于右子节点的左子节点,左子节点的左子节点必须等于右子节点的右子节点,所以需要二叉树左右两部分通过中序遍历进行比较。

 public boolean isSymmetric(TreeNode root) {
    if (root == null)
        return true;
    //从两个子节点开始判断
    return isSymmetricHelper(root.left, root.right);
    }

 public boolean isSymmetricHelper(TreeNode left, TreeNode right) {
    //如果左右子节点都为空,说明当前节点是叶子节点,返回true
    if (left == null && right == null)
        return true;
    //如果当前节点只有一个子节点或者有两个子节点,但两个子节点的值不相同,直接返回false
    if (left == null || right == null || left.val != right.val)
        return false;
    //然后左子节点的左子节点和右子节点的右子节点比较,左子节点的右子节点和右子节点的左子节点比较
    return isSymmetricHelper(left.left, right.right) && isSymmetricHelper(left.right, right.left);
}

从根节点的左右节点同时开始遍历并对节点进行判断,从最外层到达树的底端,也就是当节点左右子节点都为null时到达叶节点,然后开始从后往前递归进行中序遍历。
该解法在入栈和出栈时都对数据进行了逻辑处理,所以不属于任何一种遍历方式, 入栈时相当于前序遍历,出栈是中序遍历。

以上题目及实列均来自于:力扣(LeetCode)
代码摘录至作者:数据结构和算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值