LeetCode104 && LeetCode111:二叉树的高度

目录

一、题目

二、示例

三、思路

四、代码


一、题目

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

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

2、LeetCode111:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

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

二、示例

1、LeetCode104:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3.

2、LeetCode111:

给定二叉树 [3,9,20,null,null,15,7],

      3
     / \
   9  20
       /  \
    15   7
返回它的最小深度  2.

三、思路

1、LeetCode104:先序遍历,每次递归,均返回最大深度。

2、LeetCode111:先序遍历,每次递归,均返回最小深度。

四、代码

1、LeetCode104:

# 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:
        """
        :rtype: int
        """
        def DFS(root):
            if root is None:
                return 0
            if root.left is not None and root.right is None:
                return 1 + DFS(root.left)
            if root.right is not None and root.left is None:
                return 1 + DFS(root.right)
            return 1 + max(DFS(root.left), DFS(root.right))

        return DFS(root)

if __name__ == '__main__':
    root = TreeNode(3)
    root.left = TreeNode(9)
    root.right = TreeNode(20)
    root.right.left = TreeNode(15)
    root.right.right = TreeNode(7)
    s = Solution()
    ans = s.maxDepth(root)
    print(ans)

2、LeetCode111:

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

class Solution:
    def minDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        def DFS(root):
            if root is None:
                return 0
            if root.left is not None and root.right is None:
                return 1 + DFS(root.left)
            if root.right is not None and root.left is None:
                return 1 + DFS(root.right)
            return 1 + min(DFS(root.left), DFS(root.right))

        return DFS(root)

if __name__ == '__main__':
    root = TreeNode(3)
    root.left = TreeNode(9)
    root.right = TreeNode(20)
    root.right.left = TreeNode(15)
    root.right.right = TreeNode(7)
    s = Solution()
    ans = s.minDepth(root)
    print(ans)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值