问题描述
我正在编写迭代解决方案来寻找二叉树的最大深度 - 使用 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
,但您可能会在修复主要错误后解决这个问题。