美文网首页
树6,例题二叉树的最大、最小深度

树6,例题二叉树的最大、最小深度

作者: 小碧小琳 | 来源:发表于2018-08-01 21:07 被阅读0次

    都是用DFS来解决,提到DFS,很自然的想到用递归做

    一、Maximum Depth of Binary Tree

    参考Maximum Depth of Binary Tree

    • 递归结束条件:
      输入节点为None时,直接返回0,表示此节点向下深度是0
    • 递归更改条件:
      每次深度往下搜索一个子节点时,深度都需要加1;
    • 递归调用函数:
      返回子节点的深度。又因为父节点下可能有两个子节点,因此需要返回两个子节点中深度最大的节点。
    # 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):
            if root == None:
                return 0
            else:
                return max(self.maxDepth(root.right)+1,self.maxDepth(root.left)+1)
    

    二、Minimum Depth of Binary Tree

    在二叉树的功能测试中,经常会有这样的测试样例:没有分叉,一条路走到黑的树。
    比如一条树从头到尾只有左子节点,如果直接把上述的代码中max改为min,那么就会在一开始对右子节点进行递归调用时返回0,而其实,对于这种特殊情况右子节点是压根不能考虑的。

    因此在一开始,需要判断这个树的根节点没有子节点,只有一个子节点,有两个子节点的情况。

    这是最短路径长度的代码

    class Solution:
        def minDepth(self, root):
            if root == None:
                return 0
            if root.left ==None and root.right ==None:
                return 1
            elif root.left == None:#左子节点为空,父节点需要向右子节点走,一直走到叶节点
                return self.minDepth(root.right) + 1
            elif root.right == None:
                return self.minDepth(root.left) + 1
            else:
                return min(self.minDepth(root.right),self.minDepth(root.left))+1
    

    相关文章

      网友评论

          本文标题:树6,例题二叉树的最大、最小深度

          本文链接:https://www.haomeiwen.com/subject/esllvftx.html