技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。
如果有任何问题可以在文章后评论或者私信给我。
如果有朋友希望我讲些其他话题,请在评论区留言或者私信给我。
持续分享,敬请关注。
LeetCode 101. 对称树(Symmetric Tree)
问题描述:
给定一个二叉树, 检查它是否是镜像的 (围绕其中心对称).
比如, 二叉树 [1,2,2,3,4,4,3] 是对称的:
而 [1,2,2,null,3,null,3] 不是:
注:如果你能递归地和迭代地解决它,那就更有价值了。
C语言实现:
这个问题其实很简单,我们只要同时比较根节点的左右两个树。
对每一层,左边的子树从左边向右选择一个节点,右边子树从右边向左选择一个节点,这两个节点就是对称节点,比较它们的值。
- 如果一个为空,一个不为空,说明不对称,返回false;
- 如果都不为空,但是值不等,说明不对称,返回false;
- 如果都不为空,值相等,就递归比较下去。注意因为是二叉树,一个节点有左右两个孩子,所以要递归两次,其中有任何一次递归检查到不对称 就返回false;
- 其余情况都是对称的,因此返回true。
比较步骤图示如下:
详细代码如下:
Java语言实现:
Java 的实现和C语言的实现一致,不再撰述。
代码如下:
Python语言实现:
Python 的实现和C语言的实现一致,不再撰述。
代码如下: