二叉树的深度

2019-07-21  本文已影响0人  hustyanye

递归的写法的话,主要是考虑清楚递归条件的返回值,以及如何判断最大的深度。

  1. 递归的返回值,就是叶子节点的下一层,node都为空了,返回0就好。注意不是返回1!!!
  2. 对于单个节点来说,他的深度为左右子树的深度最大值+1
class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:
            return 0
        return max(self.maxDepth(root.left),self.maxDepth(root.right)) +1

非递归写法的话,可以用层次遍历的思路,层次遍历的时候,注意用队列保存每一层的值。然后每一层用len去取当前队列的宽度!

class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:
            return 0
        
        from collections import deque
        level = 0
        que = deque([root])
        while que:
            level += 1
            level_len = len(que)
            for i in range(0,level_len):
                tmp_node = que.popleft()
                if tmp_node.left:
                    que.append(tmp_node.left)
                if tmp_node.right:
                    que.append(tmp_node.right)
        return level
上一篇下一篇

猜你喜欢

热点阅读