关于此问题,我遇到了一些问题。以下是原始问题:
我决定使用堆栈来存储跟踪,然后从左子树到右子树进行DFS。
在此过程中,当找到q或p时,只需将迹线推入新的堆栈(stack1)。第二次找到其余的q或p时,可以检查stack1的长度是否为2,因此我们中断迭代并比较两条迹线以找到答案。
完成后,我运行了一些自定义测试用例,它们都正常工作。但是提交后,系统显示“运行时错误”。有人可以帮我弄清楚为什么我错了吗?任何意见或建议将不胜感激。谢谢。
这是我的原始答案:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
from copy import deepcopy
class Solution(object):
def lowestCommonAncestor(self, root, p, q):
"""
:type root: TreeNode
:type p: TreeNode
:type q: TreeNode
:rtype: TreeNode
"""
stack1, stack, last, sign = [], [], root, False
stack.append(root)
if root == q or root == p:
stack1.append([root])
while stack:
while root.left and root.left != last and root.right != last:
last = root
root = root.left
stack.append(root)
if root == p or root == q:
stack1.append(deepcopy(stack))
if len(stack1) == 2:
sign = True
break
if sign:
break
if root.right != last and root.right:
ast = root
root = root.right
stack.append(root)
if root == p or root == q:
stack1.append(deepcopy(stack))
if len(stack1) == 2:
break
else:
last = stack.pop()
root = stack[-1]
for x in stack1[0][::-1]:
for y in stack1[1][::-1]:
if y.val == x.val:
return x