技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。
目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。
初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式聊到大数据框架,从大数据聊到人工智能,... ...。
如果有任何问题可以在文章后评论或者私信给我。
我会持续分享下去,敬请您的关注。
LeetCode 100. 判断两个二叉树是否相等(Same Tree)
问题描述:
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例:
C语言实现:
第一方法是暴力的方法,按照相同的遍历算法分别遍历p和q,产生两个列表,然后比较两个列表是否相等。
第二种方法是递归比较, 如下图(图中用的是前序遍历,实际算法中遍历顺序无关紧要):
我们用递归的方法比较p和q的相同位置的节点:
- 如果都相等或者都为空就返回true;
- 如果出现任何对应节点的值不等,就返回false;
- 如果一个节点不为空,但对应的另一个节点为空返回false;
相比来说第二种算法的的效率要更好,空间复杂度也更低。。
我用这种方法来解这道题。
代码如下:
这种算法在比较两个树的问题中是比较常用的,请大家务必记住
python语言的实现:
python的实现和C语言实现基本一致
代码如下:
Java语言的实现:
Java的实现和C语言的实现基本一致。
代码如下: