[2015/7/17] #235, #236

#235 Lowest Common Ancestor of a Binary Search Tree

Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.

According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”

        _______6______
       /                  ___2__          ___8__
   /      \        /         0      _4       7       9
         /           3   5

For example, the lowest common ancestor (LCA) of nodes 2 and 8 is 6. Another example is LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.

The best code so far:

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
13         TreeNode *cur = root;
14         while (cur != NULL) {
15             if (cur->val > p->val && cur->val > q->val) cur = cur->left;
16             else if (cur->val < p->val && cur->val < q->val) cur = cur->right;
17             else return cur;
18         }
19         return cur;
20     }
21 };

http://www.cnblogs.com/easonliu/p/4639043.html

不用迭代效率显然要高啊!



Code by S:

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
13         if(root == NULL || p == NULL || q == NULL)
14             return NULL;
15         /*TreeNode* tmp;
16         if (p->val == q->val)
17             return p;
18         if (p->val > q->val){
19             tmp = p;
20             p = q;
21             q = tmp;
22             delete tmp;
23         }*/
24
25         if((p->val < root->val) && (q->val < root->val)){
26             root = root->left;
27             return lowestCommonAncestor(root, p, q);
28         }
29         else if((p->val > root->val) && (q->val > root->val)){
30             root = root->right;
31             return lowestCommonAncestor(root, p, q);
32         }
33         else
34             return root;
35     }
36 };

默认p->val <= q->val; 一开始没考虑NULL的情况,以及一开始迭代初每次判断一左一右则终止这个,一直报runtime error的错,最后把这个判断放在else里面就跑过了。




#237 Lowest Common Ancestor of a Binary Tree

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.

According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”

        _______3______
       /                  ___5__          ___1__
   /      \        /         6      _2       0       8
         /           7   4

For example, the lowest common ancestor (LCA) of nodes 5 and 1 is 3. Another example is LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.

The best code so far

http://wp.javayu.me/2014/02/lowest-common-ancestor-of-a-binary-tree/

http://articles.leetcode.com/2011/07/lowest-common-ancestor-of-a-binary-tree-part-i.html

http://blog.csdn.net/xudli/article/details/8560362



Code by S:

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
13         if(root == NULL || p == NULL || q == NULL)
14             return NULL;
15         if(root == p || root == q)
16             return root;
17         TreeNode *L = lowestCommonAncestor(root->left, p, q);
18         TreeNode *R = lowestCommonAncestor(root->right, p, q);
19         if(L && R)
20             return root;
21         return L ? L : R;
22         }
23 };

想通道理都花了好久- -,被自己蠢到了。

时间: 2024-10-28 22:59:43

[2015/7/17] #235, #236的相关文章

张珺 2015/07/17 个人文档

姓名 张珺 日期 信息楼南406,中蓝公寓蓝芳园D507,2015/07/17 主要工作及心得 今天,我们先去找老师对程序进行了检查,并讨论了关于报告编写的问题.针对老师指出的问题,以及老师提出的意见.建议,我们在回来后对程序进行了修改.我主要负责对程序界面中中文显示及界面标题的问题进行修改.此外,我继续进行了报告的编写工作 遇到的问题 界面显示.提示信息中缺乏中文信息 解决方法 按照老师要求修改界面和对话框

2015.11.17 新起点,出发。

今天注册了博客,要开始认真仔细的学习前端技术了.这个博客将作为我学习进度记录.学习笔记整理.心得体会整理等书写记录的工具. —希望苍天不负有心人 2015.11.17

任笑萱 2015/7/17 个人文档

姓名 任笑萱 日期 2015年7月17日 主要工作及心得 今天我们先去找老师探讨了一下关于报告的格式问题,老师给我们提出了一些意见,之后回来之后我对我数据库等等部分的报告进行了修改,之后把我之前测试的部分的报告给更改了,之后我对个人报告进行了编写,这部分的报告还是比较麻烦的,我还是写了很长一段时间,将自己的思想阐述清楚了. 又是编写报告的一天,感觉软件工程很大一部分都是报告的编写,真是需要耐心.细致的一项工作. 遇到的问题 1)         与老师探讨之后,发现报告某些部分不符合要求 解决方

235.236. Lowest Common Ancestor of a Binary (Search) Tree -- 最近公共祖先

235. Lowest Common Ancestor of a Binary Search Tree Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST. According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between

2015.11.17

CommonJS CommonJs是服务器端模块的规范,Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象. 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 // foobar.js //私有变量 var test = 123; //公有方法 function foobar () {     this.foo =

赵晓铮 2015/7/17 个人文档

姓名 赵晓铮 日期 2015年7月16日 主要工作及心得 今天,我们继续编写报告,我今天主要写的是详细设计和测试分析的经理部分. 遇到的问题 交于老师检查后,发现昨天写的报告少写了一些,格式不太对. 解决方法     将老师提出的问题记下来,进行相应的修改,并且将询问的结果运用到今天的报告中.

2015.7.17 第八课 课程重点(js语句:条件、循环)

1.条件语句: (1)比较操作符: ==:判断是否相等 !=:判断是否不相等 > :判断是否大于 >=:判断是否大于等于 < :判断是否小于 <=:判断是否小于等于 [例1] if(iNum1==iNum2) //如果iNum1与iNum2相等 { iNum3=iNum1; //将iNum1的值赋给iNum3 } else{  //否则 iNum3=iNum2;  //将iNum2的值赋给iNum3 } [补充]以上也可写作: iNum3 = iNum1==iNum2 ? iNum

陈嘉 2015/07/17 个人文档

姓名 陈嘉 日期 2015/7/16 主要工作及心得 晚上报告,整理格式 按照测试计划报告完成测试报告的编写. 和老师讨论相关事宜 完成个人报告 遇到的问题 与老师探讨之后,发现报告某些部分不符合要求 解决方法 按照老师的要求进行更改

我关注的一周技术动态2015.08.17

服务化和资源管理技术 1. Kubernetes技术分析之存储 http://dockone.io/article/556 要点: 众所周知,使用Docker的时候,容器中的数据是临时,即当容器销毁时,其中的数据时丢失.如果需要持久化数据,需要使用Docker Volume挂载宿主机上的文件目录到容器中.本文介绍了 kubernetes 支持的几种存储系统. 2. Docker 1.8:可信镜像.Toolbox.Registry 以及编排工具大更新 http://dockone.io/artic