微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 BFS 的二叉树的最大深度 - 为什么深度加倍?

如何解决使用 BFS 的二叉树的最大深度 - 为什么深度加倍?

我正在编写迭代解决方案来寻找二叉树的最大深度 - 使用 Breadth First Search (BFS)

class TreeNode:
    def __init__(self,val=0,left=None,right=None):
        self.val = val
        self.left = left
        self.right = right

from collections import deque
class Solution:
    def maxDepth(self,root: TreeNode) -> int:
        if not root: 
            return 0

        queue = deque()
        queue.append(root)
        depth = 1
        level_length = len(queue)

        while queue: 
            for i in range(level_length): 
                node = queue.popleft() 

                if node.left: 
                    queue.append(node.left)

                if node.right: 
                    queue.append(node.right)
                    
            depth +=1 
            
        return depth

对于输入 root = [3,9,20,null,15,7],我得到的是 output=6 而不是 3,这显然是正确答案。

我已经在纸上检查了我的代码几次,但似乎看不出它的不足之处 - 有什么想法吗?

解决方法

CREATE DEFINER=`admin`@`%` PROCEDURE `GetUserProfile`(IN `UserSignUp` VARCHAR(350),IN `pWord` TEXT,OUT `status` INT,OUT `PhoneNumber` TEXT,OUT `country` INT,OUT `userphoto` TEXT,OUT `emailId` TEXT,OUT `username` TEXT,OUT `msg` TEXT) READS SQL DATA COMMENT '0 = user dont exists,1 = success,2 - wrong pword' BEGIN SET @yesNo = 0; CALL UserAuth( UserSignUp,pWord,@yesNo ); IF @yesNo = 0 THEN SET msg = "user don't exists"; END IF; IF @yesNo = 1 THEN SELECT name,email,photo,mobile_no,countryCode INTO username,emailId,userphoto,PhoneNumber,country FROM App_users WHERE email = LOWER ( UserSignUp ) AND password = pWord ; SET msg = "success"; END IF; IF @yesNo = 2 THEN SET msg = "wrong password"; END IF; SET status = @yesNo; END 在遍历开始前只计算一次,所以它总是 1。这意味着你的内部 CREATE DEFINER=`admin`@`%` PROCEDURE `UserAuth`(IN `UserEmail` VARCHAR(350),IN `PWord` TEXT,OUT `success` INT) READS SQL DATA COMMENT ' status =2 : pw error,status =0: user dont extsts' BEGIN SET success = 0; SELECT password INTO @Word FROM App_users WHERE email = LOWER( UserEmail ); IF @Word IS NOT NULL THEN IF @Word = PWord THEN SET success = 1; ELSE SET success = 2; END IF; END IF; 循环永远不会运行超过一次并且实际上不存在,导致 level_length = len(queue)在每个节点上运行。

将长度计算移到 for 中,以便 depth += 1 循环在递增 while 之前为每个级别运行正确的次数。

Leetcode 想要 for 而不是 depth,但您可能会在修复主要错误后解决这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。