LeetCode 993:二叉树堂兄弟节点判断代码错误排查求助
排查LeetCode 993题堂兄弟节点判断的错误
针对你遇到的测试用例root = [1,2,3,null,4,null,5],x=5、y=4返回false的问题,大概率是你的height函数或parent函数存在逻辑漏洞,或者最终的判断条件有误,以下是具体排查方向:
可能的错误点
1. 节点深度计算不一致
- 检查你的
height函数对深度的计数规则:比如根节点1的深度是0还是1?如果根节点深度为1,那么4和5的深度应该是3;如果根节点深度为0,则两者深度为2。 - 确认递归计算深度时,是否正确处理了空节点的情况:比如当节点为空时返回
-1还是0?错误的返回值会导致深度少算一层。
2. 父节点查找错误
- 单独测试
parent函数:4的父节点应该是2,5的父节点应该是3。如果函数返回了错误的节点(比如null或其他值),会导致父节点判断错误。 - 检查递归查找父节点的逻辑:是否在找到目标节点时,正确返回当前节点作为父节点?有没有漏判右子树的情况?
3. 最终判断逻辑错误
- 确认你是同时满足深度相等和父节点不同两个条件才返回
true,有没有误写成||(或)而不是&&(且)?
优化建议:一次遍历同时获取深度和父节点
分开调用height和parent函数容易因为两次遍历的逻辑不一致导致错误,建议用一次DFS遍历同时记录两个节点的父节点和深度,示例代码如下(Python):
def isCousins(root, x, y): x_data = None # 存储(x的父节点, x的深度) y_data = None def dfs(node, parent, depth): nonlocal x_data, y_data if not node: return # 找到目标节点时记录信息 if node.val == x: x_data = (parent, depth) if node.val == y: y_data = (parent, depth) # 递归遍历左右子树 dfs(node.left, node, depth + 1) dfs(node.right, node, depth + 1) dfs(root, None, 0) # 判断是否满足堂兄弟条件 return x_data[1] == y_data[1] and x_data[0] != y_data[0]
这个方法只遍历一次树,避免了两次遍历可能出现的逻辑不一致问题,也更容易调试。
内容的提问来源于stack exchange,提问作者Divik
相关产品推荐
相关产品推荐

