• leetcode104 Maximum Depth of Binary Tree


     1 """
     2 Given a binary tree, find its maximum depth.
     3 The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
     4 Note: A leaf is a node with no children.
     5 Example:
     6 Given binary tree [3,9,20,null,null,15,7],
     7     3
     8    / 
     9   9  20
    10     /  
    11    15   7
    12 return its depth = 3.
    13 """
    14 """
    15 此题好题,将提供三种解法
    16 """
    17 class TreeNode:
    18     def __init__(self, x):
    19         self.val = x
    20         self.left = None
    21         self.right = None
    22 
    23 class Solution1(object):
    24     def maxDepth(self, root):
    25         if root == None:
    26             return 0
    27         else:
    28             leftdepth = self.maxDepth(root.left)
    29             rightdepth = self.maxDepth(root.right)
    30             return max(leftdepth, rightdepth)+1
    31 """
    32 递归的方法,分别递归左子树,右子树的深度,取最大的+1(根结点)
    33 """
    34 class Solution2(object):
    35     def maxDepth(self, root):
    36         if root == None:
    37             return 0
    38         queue = []
    39         depth = 0
    40         queue.append(root)
    41         while queue:
    42             cur = [x.val if x else None for x in queue]
    43             newqueue = []
    44             for x in queue:
    45                 if x.left:
    46                     newqueue.append(x.left)  #bug 不是queue,应该是newqueue
    47                 if x.right:
    48                     newqueue.append(x.right)
    49             queue = newqueue
    50             depth += 1
    51         return depth
    52 
    53 """用队列进行BFS搜索,记录depth"""
    54 
    55 class Solution3(object):
    56     def maxDepth(self, root):
    57         if root == None:
    58             return 0
    59         stack = []
    60         depth = 0
    61         stack.append((1, root))       #!!!用一个tuple存当前结点与其深度
    62         while stack:
    63             current_depth, root = stack.pop()     #cur 记录当前结点深度
    64             if root:
    65                 stack.append((current_depth+1, root.left))  #bug (,) 少加了一个括号
    66                 stack.append((current_depth+1, root.right))
    67                 depth = max(depth, current_depth)
    68         return depth
    69 
    70 """
    71 用栈进行DFS搜索,
    72 值得注意的是:用(current_depth, root)入栈
    73 记录当前结点的深度,每入栈一个结点 cur+1
    74 """
  • 相关阅读:
    函数的存储 堆和栈
    函数的容错处理 函数的返回值
    Linux启动故障排查和修复技巧
    干货 | 亿级Web系统负载均衡几种实现方式
    利用expect批量修改Linux服务器密码
    干货 | LVM快照学习
    实战 | Linux根分区扩容
    LVM 逻辑卷学习
    Shell脚本实战:日志关键字监控+自动告警
    手把手教你在Linux中快速检测端口的 3 个小技巧
  • 原文地址:https://www.cnblogs.com/yawenw/p/12254003.html
Copyright © 2020-2023  润新知