【Leetcode-Java】101.Symmetric Tree

1.原题

链接:https://leetcode.com/problems/symmetric-tree/

2.题目大意

给出一棵树,判断其是否是其自身的镜像。

3.解题思路

其镜像和其自身相同,根据画图可得规律:首先从根结点开始,判断其左右结点是否相同:左右结点均为null,符合;其中一个为null,不符;左右结点非空但值不同,不符;左右结点非空且值相同,再递归判断其左结点的左结点和右结点的右结点是否相同,以及左结点的右结点和右结点的左结点是否相同。

4.代码实现

递归实现:

    public boolean isSymmetric(TreeNode root) {
        return root==null || isSymmetric(root.left, root.right);
    }
    public boolean isSymmetric(TreeNode left,TreeNode right) {
        if(left==null || right==null)
        return left==right;
       return isSymmetric(left.left, right.right)&&isSymmetric(left.right, right.left);
    }

循环实现:

需要额外的栈来保存

参考:https://discuss.leetcode.com/topic/5941/recursive-and-non-recursive-solutions-in-java

相关:

求二叉树的镜像过程:先前序遍历这棵树的每个结点,如果遍历的结点有子结点,就交换它的两个子结点。当交换为所有非叶子结点的左右结点之后,就得到了树的镜像




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值