二叉树两个结点的最低公共父结点 【微软面试100题 第七十五题】
题目要求:
输入二叉树中的两个结点,输出这两个及诶单在数中最低的共同父结点。
题目分析:
还有一种情况:如果输入的两个结点中有一个或两个结点不在二叉树中,则输出没有共同父结点;
因此,可以在程序中定义一个flag=0,找到一个点之后flag就加1,最后判断的时候,如果flag=2,则说明在二叉树中找到了输入的两个结点。
代码实现:
#include <iostream> #include <stack>using namespace std;typedef struct BinaryTree {struct BinaryTree *left,*right;int data; }BinaryTree;int flag = 0; void initTree(BinaryTree **p,BinaryTree **a,BinaryTree **b); BinaryTree *GetLowestParent(BinaryTree *root,BinaryTree *X,BinaryTree *Y);int main(void) {BinaryTree *root,*a,*b;initTree(&root,&a,&b);BinaryTree *parent = GetLowestParent(root,a,b);if(parent && flag==2)cout << "最低公共父结点的值为:" << parent->data << endl;elsecout << "没有最低公共父结点!" << endl;a = new BinaryTree;flag = 0;parent = GetLowestParent(root,a,b);if(parent && flag==2)cout << "最低公共父结点的值为:" << parent->data << endl;elsecout << "没有最低公共父结点!" << endl;return 0; } // 10 // / \ // 5 12 // / \ // 4 7 void initTree(BinaryTree **p,BinaryTree **a,BinaryTree **b) {*p = new BinaryTree;(*p)->data = 10;BinaryTree *tmpNode = new BinaryTree;tmpNode->data = 5;(*p)->left = tmpNode;tmpNode = new BinaryTree;*b = tmpNode;tmpNode->data = 12;(*p)->right = tmpNode;tmpNode->left = NULL;tmpNode->right = NULL;BinaryTree *currentNode = (*p)->left;tmpNode = new BinaryTree;*a = tmpNode;tmpNode->data = 4;currentNode->left = tmpNode;tmpNode->left = NULL;tmpNode->right = NULL;tmpNode = new BinaryTree;tmpNode->data = 7;currentNode->right = tmpNode;tmpNode->left = NULL;tmpNode->right = NULL;cout << "二叉树为:" <<endl;cout << " " << 10<<endl;cout << " " <<"/" << " "<< "\\" <<endl;cout << " " << 5 << " " << 12 << endl;cout << " " <<"/" << " "<< "\\" <<endl;cout << 4 << " " << 7 << endl; } BinaryTree *GetLowestParent(BinaryTree *root,BinaryTree *X,BinaryTree *Y) {if(root == NULL)return NULL;if(X==root || Y==root){flag++;return root;}BinaryTree *left = GetLowestParent(root->left,X,Y);BinaryTree *right = GetLowestParent(root->right,X,Y);if(left==NULL && right==NULL)return NULL;else if(left==NULL)return right;else if(right==NULL)return left;elsereturn root; }
转载于:https://www.cnblogs.com/tractorman/p/4116437.html
二叉树两个结点的最低公共父结点 【微软面试100题 第七十五题】相关推荐
- 程序员面试题精选100题(48)-二叉树两结点的最低共同父结点[数据结构]
题目:二叉树的结点定义如下: struct TreeNode { int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight; }; 输入二叉树中的两个结点 ...
- 程序员面试100题之五:二叉树两个结点的最低共同父结点
题目:二叉树的结点定义如下: struct TreeNode { int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight; }; 输入二叉树中的两个结点 ...
- 求一颗二叉树中两个节点的最低公共父节点
题目:求一棵二叉树中两个节点的最低公共父节点 思路:递归 和 非递归 public static TreeNode getLastCommonParentRec(TreeNode root, Tree ...
- 寻找树中两个结点的最低公共祖先
寻找树中两个结点的最低公共祖先 Q:在树中寻找两个结点的最低公共祖先,是什么意思呢? A:树是由根节点衍生左右孩子继续衍生左右孩子的左右孩子.所以呢树中的两个结点是一定拥有最低公共祖先(这两个结点Q: ...
- 树中两个结点的最低公共祖先
题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...
- 程序员面试100题之十六:二叉树中两个节点的最近公共父节点(最低的二叉树共同祖先)
这个问题可以分为三种情况来考虑: 情况一:root未知,但是每个节点都有parent指针 此时可以分别从两个节点开始,沿着parent指针走向根节点,得到两个链表,然后求两个链表的第一个公共节点,这个 ...
- 寻找二叉树两个结点的最低共同父节点
寻找二叉树两个结点的最低共同父节点 题目:二叉树的结点的定义如下: struct TreeNode {int m_nValue;TreeNode *m_pLeft;TreeNode *m_pRight ...
- 50:树中两个结点的最低公共祖先
题目:求树中两个结点的最低公共祖先,此树不是二叉树,并且没有指向父节点的指针. 树的结点定义 private static class TreeNode {int val;List<TreeNo ...
- 程序员面试100题之十六:二叉树中两个节点的最近公共父节点
这个问题可以分为三种情况来考虑: 情况一:root未知,但是每个节点都有parent指针 此时可以分别从两个节点开始,沿着parent指针走向根节点,得到两个链表,然后求两个链表的第一个公共节点,这个 ...
最新文章
- MySQL , MHA , Haproxy 配置
- 文字时钟罗盘动态html代码_罗盘时钟手机版,罗盘时钟屏保,罗盘时钟壁纸
- Java---简易自动取货机
- oracle 查阻塞日志,通过Oracle补充日志,找到锁阻塞源头的SQL
- iOS----------使用cocoapods遇到的问题
- Kalman Filter : 理解卡尔曼滤波的三重境界
- 玩转SpringSession,重要知识点全面剖析!
- Perforce的环境变量配置
- 禅道程序员的10条原则--转载--为了不忘
- sftp配置导致ssh连接闪断
- server端多个文件的压缩 .NET
- Zemax 全新 22.1 版本产品现已发布
- 搜索算法的感悟——解空间
- python爬虫qq音乐歌词_Python如何爬取qq音乐歌词到本地
- 2017 Google IO 开发者大会直播入口
- python爬虫-批量下载qq音乐
- mysql 主从1146_浅谈mysql主从同步及错误1146处理
- Java理论题(2)——简答题
- 兰州烧饼 南阳理工ACM 题目779
- jQuery Marquee
热门文章
- 金融贷款逾期的模型构建3——模型评估
- 写脚本时遇到的一些问题+自己的一些简单总结[小白版]
- python写一个文件下载器_python使用tcp实现一个简单的下载器
- less 函数_Python中的函数式编程教程,学会用一行代码搞定所有内容
- linux 串口编程_ARM-Linux开发与MCU开发有何不同?上篇
- 神策数据颜含:流量见顶与监管趋严的双重压力下,大文娱产品如何突围?
- 获奖公布 | Hello,SDK!数据采集黑客松大赛完美落幕!(含活动预告)
- hadoop目录命令
- MySQL高可用的几种方案
- 【Android Studio安装部署系列】八、Android Studio主题皮肤更换