Python树中两个节点的最低公共祖先

本文阅读 2 分钟
首页 Python笔记 正文

首先来看比较简单的情况--二叉搜索树的最低公共祖先,对于二叉搜索树而言,每个节点的左子节点都小于这个数,右子节点都大于这个数,因此,我们比较当前节点和需要比较的结点m,n的大小,如果当前节点的值均大于m,n,则在当前节点的左子树继续操作,如果当前节点均小于m,n,则在当前节点的右子树继续操作,反之,则当前结点是最小公共祖先。而对于普通的二叉树而言,我们如果希望找到两个结点的最低公共祖先,那么我们可以先从树的根节点开始,找到根节点到结点m和结点n的路径,这时候我们就有两个List或者两个链表,然后就像前面题中遇到的寻找两个链表的公共结点一样,从后往前遍历两个List找到最靠后的第一个公共结点即可。

  1. # 二叉树的最低公共祖先
  2. """
  3. Definition of TreeNode:
  4. """
  5. class TreeNode:
  6. def __init__(self, val):
  7. self.val = val
  8. self.left, self.right = None, None
  9. class Solution:
  10. """
  11. @param root: The root of the binary search tree.
  12. @param A and B: two nodes in a Binary.
  13. @return: Return the least common ancestor(LCA) of the two nodes.
  14. """
  15. def lowestCommonAncestor(self, root, A, B):
  16. # write your code here
  17. if root == None:
  18. return False
  19. pathA = self.storeNodes(root, A)[0]
  20. pathB = self.storeNodes(root, B)[0]
  21. if pathA and pathB:
  22. lenA, lenB = len(pathA), len(pathB)
  23. diff = abs(lenA - lenB)
  24. if lenA > lenB:
  25. markA = lenA - diff - 1
  26. markB = lenB - 1
  27. else:
  28. markA = lenA - 1
  29. markB = lenB - diff - 1
  30. while markA >= 0 and markB >= 0:
  31. if pathA[markA] == pathB[markB]:
  32. return pathA[markA]
  33. markA -= 1
  34. markB -= 1
  35. def storeNodes(self, root, targetNode):
  36. if root == None or targetNode == None:
  37. return []
  38. elif root.val == targetNode.val:
  39. return [[targetNode]]
  40. stack = []
  41. if root.left:
  42. stackLeft = self.storeNodes(root.left, targetNode)
  43. for i in stackLeft:
  44. i.insert(0, root)
  45. stack.append(i)
  46. if root.right:
  47. stackRight = self.storeNodes(root.right, targetNode)
  48. for i in stackRight:
  49. i.insert(0, root)
  50. stack.append(i)
  51. return stack
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

Python把字符串转换成整数
« 上一篇 01-21
Python数组中重复的数字
下一篇 » 01-21

发表评论