LeetCode: 009-Lowest Common Ancestor of a Binary Search Tree
2016-01-08 14:34
381 查看
Lowest Common Ancestor of a Binary Search Tree
找出二叉树中某两个节点的最近的祖先. 可以是节点本身.思路
一个快速的解决方案- 首先依赖搜索算法构建整个二叉树的父子关系列表
- 回溯寻找父亲关系图, 需要检索关系列表, 所以考虑用dict会快一些
我的解法
class Solution(object): def lowestCommonAncestor(self, root, p, q): """ 使用DFS实现 """ stack = [(None, root)] #(parent, node_now) relation = {} for parent, node in stack: relation[node] = parent if node.left != None: stack.append((node, node.left)) if node.right != None: stack.append((node, node.right)) # 父子关系构建完毕 ancestor_p, ancestor_q = [p], [q] for i in ancestor_p: if relation[i] == None: break ancestor_p.append(relation[i]) for i in ancestor_q: if relation[i] == None: break ancestor_q.append(relation[i]) # 貌似不能这样求交, 在我的电脑上是可以的 return zip(ancestor_p[::-1], ancestor_q[::-1])[-1][0]
今天有些头晕..
实际上如果上面的解法可以通过的话,
它是另外一道题的答案:
No.236 Lowest Common Ancestor of a Binary Tree
暂时想不出来错误在哪里….等会再改吧.
补充内容
因为我把二叉搜索树的题做成二叉树了…需要补充二叉搜索树的内容. (留坑待填)
有个严重的错误
求交那里写错了. 交换顺序后结果并不对.用基本循环逻辑重新实现了这一部分
class Solution(object): def lowestCommonAncestor(self, root, p, q): """ 使用DFS实现 # 009 - 235. Lowest Common Ancestor of a Binary Search Tree """ stack = [(None, root)] #(parent, node_now) relation = {} for parent, node in stack: relation[node] = parent if node.left != None: stack.append((node, node.left)) if node.right != None: stack.append((node, node.right)) # 父子关系构建完毕 ancestor_p, ancestor_q = [p], [q] for i in ancestor_p: if relation[i] == None: break ancestor_p.append(relation[i]) for i in ancestor_q: if relation[i] == None: break ancestor_q.append(relation[i]) for i,j in zip(ancestor_p[::-1], ancestor_q[::-1])[::-1]: if i == j: break return i
虽然通过了, 确实难以令人开心.
相关文章推荐
- Binder与Service 通信机制详解二 (Binder与Service理解)
- Python3中的zip()
- 一步一步安装hive,mysql安装
- maven-nexus中添加本地仓库
- ibatis中使用insert后,返回值为null的解决方案
- 源码推荐(01.08B):一行代码搞定倒计时,登录注册找回密码页面逻辑
- OpenCV3.0.0在VS2012下的配置
- python学习之序列化
- 最快让你上手ReactiveCocoa之基础篇
- BZOJ 4029: [HEOI2015]定价|贪心|模拟
- 3033: 太鼓达人 欧拉图+暴力
- scrollTo scrollBy scrollX scrollY  offsetDescendantRectToMyCoords的理解
- leetcode day6 -- String to Integer (atoi) && Best Time to Buy and Sell Stock I II III
- Stanford机器学习---第二周.特征缩放、正规方程
- UVa 12100 - Printer Queue【队列和优先队列】
- linux会话窗口后台保持之screen
- C++ CGI Helloword
- DBContext
- 全国不动产登记交流
- Android 快速开发框架:推荐10个框架:afinal、ThinkAndroid、andBase、KJFrameForAndroid、SmartAndroid、dhroid..