求取给定的二叉树的镜像_LeetCode基础算法题第169篇:判断一棵二叉树是否是对称树...

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。

如果有任何问题可以在文章后评论或者私信给我。

如果有朋友希望我讲些其他话题,请在评论区留言或者私信给我。

持续分享,敬请关注。

LeetCode 101. 对称树(Symmetric Tree)

问题描述:

给定一个二叉树, 检查它是否是镜像的 (围绕其中心对称).

比如, 二叉树 [1,2,2,3,4,4,3] 是对称的:

afc74ee063c9613fb1d04dc30fd7b9f3.png

而 [1,2,2,null,3,null,3] 不是:

d4c758fa319f86219cb3235e233395b3.png

注:如果你能递归地和迭代地解决它,那就更有价值了。

C语言实现:

这个问题其实很简单,我们只要同时比较根节点的左右两个树。

对每一层,左边的子树从左边向右选择一个节点,右边子树从右边向左选择一个节点,这两个节点就是对称节点,比较它们的值。

  • 如果一个为空,一个不为空,说明不对称,返回false;
  • 如果都不为空,但是值不等,说明不对称,返回false;
  • 如果都不为空,值相等,就递归比较下去。注意因为是二叉树,一个节点有左右两个孩子,所以要递归两次,其中有任何一次递归检查到不对称 就返回false;
  • 其余情况都是对称的,因此返回true。

比较步骤图示如下:

0d5caeb37085d1a2202db71cee3e26e6.png

详细代码如下:

2044a7638f5840be31f8f46daa92afb3.png
1e862e22259d0042674db99c84ef5c93.png

Java语言实现:

Java 的实现和C语言的实现一致,不再撰述。

代码如下:

dbdb7bd1c1a47dd544f6fbb06ede3f56.png
7bdf6ed4b11c86863a62334a063dc027.png

Python语言实现:

Python 的实现和C语言的实现一致,不再撰述。

代码如下:

e6677a064bf7baa5f7004cd97305a89a.png
baa86652862b27d7d062fd3347ee072f.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值