leetcode_9: 相同的树(100)、对称二叉树(101)、二叉树的最大深度(104)

1.相同的树(100)

给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

思路:递归

  • 如果当前两个节点都是none, 返回true.
  • 如果当前有一个节点等于none,另一个不是none,返回false
  • 判断两个节点的值,如果不相等,则返回false. 如果相等,则将递归调用。传入的参数分别为当前的节点的左右节点。
# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
        if not p and not q:
            return True
        if p==None or q == None:
            return False
        if p.val != q.val:
            return False
        return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)

知识点:无论根节点还是子节点,我们等同看待,利用递归的思想完成当前节点的比较。

参考链接:https://leetcode-cn.com/problems/same-tree/solution/hua-jie-suan-fa-100-xiang-tong-de-shu-by-guanpengc/

2.对称二叉树(101)

给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

思路1:递归。

这里我们命名第二层的左节点为A,右节点为B。我们只要递归判断A的左节点和B的右节点、以及A的右节点和B的左节点。只要有一个返回false,则不对称。其思想和100题相同的树类似。代码可以看到与100题类似。

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def isSymmetric(self, root: TreeNode) -> bool:
        if not root:
            return True
        return self.isMirror(root.left,root.right)
    
    def isMirror(self, p, q):
        if not p and not q:
            return True
        if p==None or q==None:
            return False
        if p.val != q.val:
            return False
        return self.isMirror(p.right,q.left) and self.isMirror(p.left,q.right)

参考链接:https://leetcode-cn.com/problems/symmetric-tree/solution/dui-cheng-er-cha-shu-by-leetcode/

3.二叉树的最大深度(104)

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

思路:递归

计算树的最大深度就是计算左右子树最大深度,然后加1. 终止条件是当前节点为0,返回0.

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if root == None:
            return 0
        else:
            return max(self.maxDepth(root.left),self.maxDepth(root.right)) + 1

参考链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/solution/hua-jie-suan-fa-104-er-cha-shu-de-zui-da-shen-du-b/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值