经典面试题——求任意两个叶节点中最近的父节点
来源:互联网 发布:出国移动wifi租赁 淘宝 编辑:程序博客网 时间:2024/06/09 17:21
以下程序未经测试,仅供参考!
#include <iostream>#include <vector>using namespace std;struct LCATreeNode{ LCATreeNode* m_pLeft; LCATreeNode* m_pRight; int m_value;}bool nodePath(LCATreeNode* root, int value, vector<LCATreeNode*>& v){ if(!root) return false; if(root->m_value != value){ if(nodePath(root->m_pLeft,value,v)||nodePath(root->m_pRight,value,v)){ v.push_back(root); return true; }else return false; }else{ v.push_back(root); return true; }}LCATreeNode* findLCA(LCATreeNode* root, int value1,int value2){ if(!root) return null; vector<LCATreeNode*> v1; vector<LCATreeNode*> v2; bool find = nodePath(root,value1,v1); find &= nodePath(root,value2,v2); if(find){ int min = v1.size()<v2.size()?v1.size():v2.size(); for(int i = v1.size()-min, j = v2.size()-min; i < v1.size(); i++,j++){ if(v1[i]==v2[j]) return v1[i]; } } return null;}
该程序的思路就是,首先求出两个叶节点的路径,将其分别保存在两个向量中,从同一层开始判断是否有公共子节点。其实这个已经和两个链表中第一个公共节点的题目很相似了!反正思路是一样的。
该问题有以下几个变体:
1)求任意两个叶节点最长的距离。只要对公共部分进行计数a,两个叶节点的距离分别是l1,l2则最长距离为 l1+l2-2*a
2)求二叉搜索树的任意两个节点的公共父节点。这里要注意利用二叉搜索树的特性,即任意两个叶节点的父节点的值一定是在这两个叶节点值得中间,因此代码如下所示,同样未经验证,仅供参考!
LCATreeNode* findLCA_1(LCATreeNode* root, int value1, int value2){ LCATreeNode* tmp = root; while(tmp){ if(tmp->m_value>value1 && tmp->m_value>value2) tmp = tmp->m_pLeft; else if(tmp->m_value<value1 && tmp->m_value<value2) tmp = tmp->m_pRight; else return tmp; } return null;}
- 经典面试题——求任意两个叶节点中最近的父节点
- 【每日面试题】求一个二叉树中任意两个节点间的最大距离
- 面试题50:求二叉树中两个节点的最近公共祖先
- 求二叉树上任意两个节点的最近公共父节点
- 求满二叉树上任意两个节点的最近公共父节点
- 二叉搜索树中任意两个节点的最近共同父父节点1(LCA问题)
- 二叉搜索树中任意两个节点的最近共同父父节点2(LCA问题)
- LCA问题:求二叉树中任意两个节点的最近公共祖先
- 【面试题】剑指Offer-50-求两个节点的最近公共祖先
- 二叉树求两个节点的最近的父节点
- 【二叉树】求二叉树中两个节点的最近公共父节点
- 求二叉树中两个节点的最近公共父节点
- 二叉树中两个节点的最近公共父节点
- 二叉树中两个节点的最近父节点
- 二叉树中两个节点的最近公共父节点
- 二叉树中两个节点的最近公共父节点
- 二叉树中两个节点的最近公共父节点
- 二叉树中两个节点的最近公共父节点
- 重载双目运算符
- 一次Ajax的503错误的处理
- linux启动过程简述
- 基于导航网格的A星寻路(Navigation mesh)
- BNU 0919 日常训练 之 G N! ——高精度 万进制 10000的阶乘
- 经典面试题——求任意两个叶节点中最近的父节点
- POJ 序列 做的恶心的大水题 本质大数相加
- 锐捷面试
- Logical Address
- Android中怎么启动关闭Service及功能解释
- 修饰服的作用范围
- ARP原理、欺骗及防范
- 三角形测试用例
- 燕十八-PHP第二部传世经典