树中两个节点的最近公共祖先 多种情况分析

1.求树中两个节点的最近公共祖先
这个问题按 对题意解析思路 的不同, 可以有许多的变种问题 和 解决思路
首先我们来看比较简单的一种: 如果这颗树是 二叉搜索树( 假设这个二叉搜索树中没有两个值相同的结点, 并且我们 考虑的这两个结点不是空结点 )
根据二叉搜索树的性质( 左子树的值都比根节点小, 右子树的值都比根节点大 )
我们的思路为: 从根节点开始, 如果两个节点的值 都比当前节点(此时为根节点)小, 则 它们的 最低公共祖先在 当前节点的左子树中, 否则在 当前节点的右子树中
接下来 我们只需要, 将 需要判断的节点 更新为 当前节点的 左孩子结点 或 右孩子结点即可。
直到 遇到一个节点的值 介于我们的两个结点之间, 即它为这两个节点的 最近公共祖先。

当然别忘了 处理 特殊情况:  这两个结点, 其中一个节点 为 另一个结点的 祖先



#include <iostream>
#include <windows.h>
using namespace std;
#include "BinarySearchTree.h"					//我包含了这个头文件 来测试我们所写的函数是否能达到预期的 效果.
												//这个头文件中 只保留了 测试这个函数 需要用到的接口, 如想查看 二叉搜索树 更完整定义, 可以看我的另一篇博客 ---> 二叉搜索树
												//因为我们要用到 二叉树结点 来定义 变量, 所以在头文件中, 修改将 结点定义 放在了 类外面。 在 我的 原博客中(即二叉搜索树), 二叉搜索树的结点定义 是属于 类的私有成员.


template &l
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值