声明
添加要改颜色的字体
添加要改颜色的字体
添加要改颜色的字体
添加要改颜色的字体
今天是LeetCode第 17道题,以本文作为对此题的感想,欢迎大家交流。文中也会给出所参考的文章链接,感谢前辈们的总结。
(手动比心ღ( ´・ᴗ・` ))
题目
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入: 1 1
/ \ /
2 3 2 3
[1,2,3], [1,2,3]
输出: true
示例 2:
输入: 1 1
/
2 2
[1,2], [1,null,2]
输出: false
示例 3:
输入: 1 1
/ \ /
2 1 1 2
[1,2,1], [1,1,2]
输出: false
正文
最初想法:
如何构建二叉树?
python中用数组构建吗?
如何遍历二叉树? 以何种方式遍历?前序遍历?中序遍历?or 后序遍历? 每种遍历的理论?
代码如何实现遍历?
查看LeetCode解读后,
思路1:递归
思想:
逐个比较两个树当前节点是否为空;(为空)返回True
比较当前结点是否有一个为空;(是)返回false
(两个当前结点都不为空)比较两个当前结点的值是否相等;(否)返回false
(两个当前结点值相等)分别比较两个当前结点的左右子树是否相等,递归实现;
注意:这个不是调用内置函数。
class Solution:
def isSameTree(self, p, q):
"""
:type p: TreeNode
:type q: TreeNode
:rtype: bool
"""
# p and q are both None
if not p and not q:
return True
# one of p and q is None
if not q or not p:
return False
if p.val != q.val:
return False
return self.isSameTree(p.right, q.right) and \
self.isSameTree(p.left, q.left)
思路2:
收获
1、意识到框架的重要性,培养框架思维。(写代码时框架重要性)
明确框架和细节。
首先根据开源的代码,识别提取出这一类问题的框架。
之后在遇到此类问题,能快速确定方向。而细节确保代码的正确性。
2、二叉树算法设计的总路线:
总结
1、x