Lowest Common Ancestor of a Binary Search Tree
2016-07-19 21:27
351 查看
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).”
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.
说明:若指针tmp所指向结点为最小祖先,则(tmp->val - p->val) * (tmp->val - q->val) <= 0。其中,小于0表示指针p,q所指结点在tmp所指结点的左右子树上;等于0表示tmp == p || tmp == q成立。
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.
说明:若指针tmp所指向结点为最小祖先,则(tmp->val - p->val) * (tmp->val - q->val) <= 0。其中,小于0表示指针p,q所指结点在tmp所指结点的左右子树上;等于0表示tmp == p || tmp == q成立。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) { struct TreeNode *tmp = root; if((p->val - root->val) * (q->val - root->val) <= 0) return root; else if(p->val < root->val) tmp = tmp->left; else tmp = tmp->right; while(NULL != tmp->left || NULL != tmp->right) { if(NULL == tmp->left) tmp = tmp->right; else if(NULL == tmp->right) tmp = tmp->left; if((p->val - tmp->val) * (q->val - tmp->val) <= 0) return tmp; else if(p->val < tmp->val) tmp = tmp->left; else tmp = tmp->right; } return NULL; }
相关文章推荐
- HDU - 1021 Fibonacci Again
- week2 布局技巧与列表控件
- Insert Interval
- week1 Android应用界面开发
- 我的成长日记(java14天)
- Flask Web开发 第1章
- vba工具
- 定义页面的Dispose方法:[before]unload事件启示录
- SharedPreferences初学
- java-jni-03-JNI Types and Data Structure
- UVA - 123 Searching Quickly
- 【HDU 1195】Open the Lock(BFS)
- Java开发准备事项(三)---MyEclipse安装与破解
- CodeForces - 569A Music
- 问题汇总(硬件问题)
- HDU 1754 I Hate It【线段树入门题,单点替换,区间最值】
- UVA - 107 The Cat in the Hat
- Android项目开发之Sqlite数据存储
- 对缓存的理解
- HDOJ 5499 SDOI(典型的翻译题目,处理女生特殊情况的问题)