在树中寻找两个节点的最低公共祖先
2013-08-17 10:53
375 查看
![](http://images.cnitblog.com/blog/548261/201308/17105156-27560885b7a244639e47b3b71a8ed1bc.png)
//通过寻找从根至节点的路径,取两个节点路径上的最后一个相同的节点,即为最低公共祖先 #include <time.h> #include <stdlib.h> #include <vector> #include "BinarySearchTree.h" #include <iostream> using namespace std; void printv(const vector<Position>& v) { vector<Position>::const_iterator cit = v.begin(); while(cit != v.end()) cout<<(*cit)->data<<" ", ++cit; cout<<endl; } //从根开始搜索到某一节点的路径(采用了二叉查找树,但没利用其性质故可以推广至具有任一数量的儿子的树中) bool find_path(BinarySearchTree t, vector<Position>& v, const int x) { if(t != NULL && t->data != x) { v.push_back(t); bool res = (find_path(t->left, v, x) || find_path(t->right, v, x)); if(true != res) v.pop_back(); return res; } else if(t == NULL) return false; v.push_back(t); return true; } int main(int argc, char const *argv[]) { std::vector<Position> v1, v2; BinarySearchTree t = NULL; MakeEmpty(&t); srand((unsigned)time(NULL)); for(int i = 0; i != 100; ++i) Insert(rand()%30, &t); PrintTree(t, 2, 0); find_path(t, v1, 8); cout<<"path to 8: "; printv(v1); find_path(t, v2, 15); cout<<"path to 15: "; printv(v2); return 0; }
相关文章推荐
- 寻找二叉树两个节点的最低公共祖先
- 【二叉树】寻找二叉树/BST的两个节点的最低公共祖先
- 寻找二叉树两个节点的最低公共祖先
- 一颗普通的二叉树,如何寻找两个节点的最低公共祖先(发现的一个与算法无关的引用问题)
- 寻找二叉树两个节点的最低公共祖先
- 寻找二叉树两个节点的最低公共祖先
- 寻找二叉树两个节点的最低公共祖先(LCA)
- 寻找二叉树两个节点的最低公共祖先
- 剑指offer50:求两个节点的最低公共祖先
- 寻找二叉树两个节点的最近公共祖先
- 面试题54:树中两个节点的最低公共祖先
- 树中两个节点的最低公共祖先
- 求二叉树中两个节点的最低公共祖先
- 二叉树中查找两个节点的最低公共祖先
- 算法:寻找树中两个结点的最低公共祖先
- 面试题50—树中两个节点的最低公共祖先
- 剑指Offer(第二版)面试案例:树中两个节点的最低公共祖先节点
- 二叉树中两个节点的最低公共祖先
- 求二叉树中两个节点的最低公共祖先节点
- 寻找二叉树中两个节点的最近的公共祖先