【LeetCode相同的树100】17 --- 相同的树

声明

添加要改颜色的字体

添加要改颜色的字体

添加要改颜色的字体

添加要改颜色的字体
今天是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

引用

发布了70 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42025376/article/details/102879344