多种方法求二叉树的最大深度

在这里插入图片描述

方法一:

from  queue import deque
class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if root is None:
            return 0
        q = deque()
        q.append(root)
        height = 0
        counter = 0  # 用来计数每一层遍历过的结点数目
        layerLength = 1  # 计数每一层的宽度,第一层的宽度为1
        while q:
            temp = q.popleft()
            counter += 1
            if temp.left is not None:
                q.append(temp.left)
            if temp.right is not None:
                q.append(temp.right)
            if counter == layerLength:
                layerLength = len(q)
                height += 1
                counter = 0
        return height

结果:

在这里插入图片描述

方法二(递归实现):

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

方法三:

class Solution:
    # dfs
    def maxDepth(self, root: TreeNode) -> int:
        stack = []
        maxd = 0
        d = 0
        while root or stack:
        	# 一直到最左边
            while root:
                d += 1
                # 将部分层的左边结点和层序数组成的元组存入stack
                stack.append((d, root))
                root = root.left
            d, root = stack.pop()
            if d > maxd:
                maxd = d
            root = root.right
        return maxd

这种方法有部分结点的遍历次数不止一次,而且内存花销大
方法四:

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if root == None:
            return 0
        queue = [root]
        depth = 1
        while(1):
            next_queue = []
            for node in queue:
                if(node.left):
                    next_queue.append(node.left)
                if(node.right):
                    next_queue.append(node.right)
            if (next_queue):
                depth += 1
                queue = next_queue
            else:
                return depth

这种方法类似第一种方法,都是在层序遍历的基础上变化
方法五:

class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        depth = 0
        if root == None:
            return depth
        if root.left == None and root.right == None:
            return 1
        
        nodes = [root]
        while len(nodes) > 0:
            depth = depth + 1

            temp_nodes = []
            for node in nodes:
                if node.right != None:
                    temp_nodes.append(node.right)
                if node.left != None:
                    temp_nodes.append(node.left)
                
            nodes = temp_nodes

        return depth

和上一种方法类似,在层序遍历的基础上做变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值