博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构练习(36)二叉树两结点的最低共同父结点
阅读量:5164 次
发布时间:2019-06-13

本文共 1645 字,大约阅读时间需要 5 分钟。

思路1:

1. 构建从head到node的path,这个递归的思路需要借鉴。

2. 从2条path中得到公共节点,然后就可以利用以前的方法了。

#include 
using namespace std;struct tree{ int m_value; tree* m_lhs; tree* m_rhs;};bool GetNodePath(tree* head, tree* node, list
& path){ if (head == node) return true; path.push_back(head); bool found = false; if (head->m_lhs) found = GetNodePath(head->m_lhs, node, path); if (!found && head->m_rhs) found = GetNodePath(head->m_rhs, node, path); if (!found) path.pop_back(); return found;}tree* LastCommonNode(const list
& path1, const list
& path2){ list
::const_iterator iter1 = path1.begin(); list
::const_iterator iter2 = path2.begin(); tree* lastnode = nullptr; while (iter1 != path1.end() && iter2 != path2.end()) { if (*iter1 == *iter2) lastnode = *iter1; ++iter1, ++iter2; } return lastnode;}tree* GetCommonParent(tree* head, tree* node1, tree* node2){ if (head == nullptr || node1 == nullptr || node2 == nullptr) return nullptr; list
path1; GetNodePath(head, node1, path1); list
path2; GetNodePath(head, node2, path2); return LastCommonNode(path1, path2);}

思路2:

也是递归,如果找到node则返回1,找不到则返回0.

TreeNode* lca = NULL;int traverse(TreeNode* p, TreeNode* p1, TreeNode* p2) {    if (!p) return 0;    if (p == p1 || p == p2) return 1;    int res = traverse(p->m_pLeft, p1, p2) + traverse(p->m_pRight, p1, p2);    if (res == 2 && lca == NULL) lca = p;    return res;}

变型:

如果该树为二叉查找树的话,就要稍微变换下思路了。

如果2个节点的值都小于根节点,则在其左边,否则在右边。

 

转载于:https://www.cnblogs.com/kedebug/archive/2012/12/18/2823440.html

你可能感兴趣的文章
Linq to Object实现分页获取数据
查看>>
mac常用系统命令
查看>>
第42章:MongoDB-集群--Sharding(分片)--单机的搭建
查看>>
2016/11/14
查看>>
异步执行js脚本——防止阻塞
查看>>
利用Excel导出sql语句
查看>>
伪分布模式安装hadoop
查看>>
oracle 051学习笔记
查看>>
Leanote 二进制版详细安装教程 Windows
查看>>
用 ROS 做内网DNS服务器
查看>>
算法 - 求和为n的连续正整数序列(C++)
查看>>
这些哭笑不得的情景,每一个程序猿都可能面对
查看>>
Codeforces 455B A Lot of Games(字典树+博弈)
查看>>
经验19--C#大事
查看>>
(生活)没有好天气
查看>>
【例9.8】合唱队形
查看>>
jquery cookie的用法(转)
查看>>
avg
查看>>
Poj_1269 Intersecting Lines -判两直线状态(水题、坑OJ)
查看>>
监听ios自带返回功能
查看>>