LeetCode 236.二叉树的最低共同祖先-回溯解决方案-Python

时间:2020-08-12 15:15:12

标签: python algorithm binary-tree backtracking tree-traversal

我正在研究这个问题(https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/),并尝试通过python中的回溯来解决它,这是我的逻辑:

  • 遍历树并找到两个节点
  • 返回其路径,然后找到出现在其中的第一个元素 都是路径,这就是LCA

这是我的代码:

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        self.path_1 = []
        self.path_2 = []
        
        self.traverse(root, [], p, q)
        
        print(self.path_1, self.path_2)
        
        for val in self.path_1:
            if val in self.path_2:
                return val
        
    def traverse(self, node, path, p, q):
        if not node:
            return
        
        path.append(node.val)
        
        if node is p:
            self.path_1 = path
        
        if node is q:
            self.path_2 = path
        
        self.traverse(node.left, path, p, q)
        self.traverse(node.right, path, p, q)
        path.remove(node.val)

似乎回溯部分不起作用,也没有给我通往两个节点的路径。有人可以帮我解决如何解决此问题吗?我知道此解决方案不是解决此问题的最佳方法,但我想知道代码中的逻辑思想出了什么问题。预先感谢!

0 个答案:

没有答案