算法2013110501
来源:互联网 发布:淘宝商家培训 编辑:程序博客网 时间:2024/05/18 02:38
题设:求二叉树中两个节点的最近的公共父节点。
解法:记根节点为R,另两个节点为X、Y。记从R到X的路径为P;从R到Y的路径为Q。则P与Q重叠部分的末端节点即为问题的解。
#include <vector>#include <cassert> struct Node { Node *m_left; Node *m_right; int m_data; }; bool isReachable(const Node *src, const Node *dst, std::vector<const Node*> *routine) {assert(dst && (src != dst) && routine);if (!src) {return false;}if ((src->m_left == dst) || (src->m_right == dst)|| isReachable(src->m_left, dst, routine)|| isReachable(src->m_right, dst, routine)) {routine->push_back(src);return true;}return false;} bool findRoutine(const Node *root, const Node *dst, std::vector<const Node*> *routine) {assert(root && dst && (root != dst));assert(routine->empty());std::vector<const Node*> reversed;if (!isReachable(root, dst, &reversed)) {assert(reversed.empty());return false;}assert(!reversed.empty());for (std::vector<const Node*>::const_reverse_iterator it = reversed.rbegin(); it != reversed.rend(); ++it) {routine->push_back(*it);}return true;}const Node* commonParent(const Node *one, const Node *another, const Node *root) {assert(one && another && root);assert((one != another) && (one != root) && (another != root));std::vector<const Node*> routineOne;if (!isReachable(root, one, &routineOne)) {return 0;}std::vector<const Node*> routineAnother;if (!isReachable(root, another, &routineAnother)) {return 0;}const Node *result = 0;std::vector<const Node*>::const_iterator itOne = routineOne.begin();std::vector<const Node*>::const_iterator itAnother = routineAnother.begin();while ((itOne != routineOne.end()) && (itAnother != routineAnother.end())) {if (*itOne != *itAnother) {break;}result = *itOne;++itOne;++itAnother;}return result;}设节点的数目为N,则算法的时间复杂度为O(N)
- 算法2013110501
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 删除文件
- 类似Lazy Android的插件,根据layout的xml文件自动生成findViewById代码
- C++设计模式--Strategy策略模式
- FZU 2089 数字游戏
- C/C++/PHP等语言 在线编译器
- 算法2013110501
- virtual judge配置和发布
- 递归调用
- Android动画效果translate、scale、alpha、rotate详解
- (利用树状数组统计子树权和8.3.1)POJ 3321 Apple Tree(利用树状数组动态统计子树权和)
- Entity Framework初识
- hadoop实现单表和多表关联
- 串口之计数器溢出率计算和串口的波特率之间的关系&& TMOD TCON SCON (转)
- 解决chrome 停止搜索的解决办法之-- Steganos Internet Anonym 导致