题目要求:

  输入二叉树中的两个结点,输出这两个及诶单在数中最低的共同父结点。

题目分析:

  还有一种情况:如果输入的两个结点中有一个或两个结点不在二叉树中,则输出没有共同父结点;

  因此,可以在程序中定义一个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题 第七十五题】相关推荐

  1. 程序员面试题精选100题(48)-二叉树两结点的最低共同父结点[数据结构]

    题目:二叉树的结点定义如下: struct TreeNode { int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight; }; 输入二叉树中的两个结点 ...

  2. 程序员面试100题之五:二叉树两个结点的最低共同父结点

    题目:二叉树的结点定义如下: struct TreeNode { int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight; }; 输入二叉树中的两个结点 ...

  3. 求一颗二叉树中两个节点的最低公共父节点

    题目:求一棵二叉树中两个节点的最低公共父节点 思路:递归 和 非递归 public static TreeNode getLastCommonParentRec(TreeNode root, Tree ...

  4. 寻找树中两个结点的最低公共祖先

    寻找树中两个结点的最低公共祖先 Q:在树中寻找两个结点的最低公共祖先,是什么意思呢? A:树是由根节点衍生左右孩子继续衍生左右孩子的左右孩子.所以呢树中的两个结点是一定拥有最低公共祖先(这两个结点Q: ...

  5. 树中两个结点的最低公共祖先

    题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...

  6. 程序员面试100题之十六:二叉树中两个节点的最近公共父节点(最低的二叉树共同祖先)

    这个问题可以分为三种情况来考虑: 情况一:root未知,但是每个节点都有parent指针 此时可以分别从两个节点开始,沿着parent指针走向根节点,得到两个链表,然后求两个链表的第一个公共节点,这个 ...

  7. 寻找二叉树两个结点的最低共同父节点

    寻找二叉树两个结点的最低共同父节点 题目:二叉树的结点的定义如下: struct TreeNode {int m_nValue;TreeNode *m_pLeft;TreeNode *m_pRight ...

  8. 50:树中两个结点的最低公共祖先

    题目:求树中两个结点的最低公共祖先,此树不是二叉树,并且没有指向父节点的指针. 树的结点定义 private static class TreeNode {int val;List<TreeNo ...

  9. 程序员面试100题之十六:二叉树中两个节点的最近公共父节点

    这个问题可以分为三种情况来考虑: 情况一:root未知,但是每个节点都有parent指针 此时可以分别从两个节点开始,沿着parent指针走向根节点,得到两个链表,然后求两个链表的第一个公共节点,这个 ...

最新文章

  1. MySQL , MHA , Haproxy 配置
  2. 文字时钟罗盘动态html代码_罗盘时钟手机版,罗盘时钟屏保,罗盘时钟壁纸
  3. Java---简易自动取货机
  4. oracle 查阻塞日志,通过Oracle补充日志,找到锁阻塞源头的SQL
  5. iOS----------使用cocoapods遇到的问题
  6. Kalman Filter : 理解卡尔曼滤波的三重境界
  7. 玩转SpringSession,重要知识点全面剖析!
  8. Perforce的环境变量配置
  9. 禅道程序员的10条原则--转载--为了不忘
  10. sftp配置导致ssh连接闪断
  11. server端多个文件的压缩 .NET
  12. Zemax 全新 22.1 版本产品现已发布
  13. 搜索算法的感悟——解空间
  14. python爬虫qq音乐歌词_Python如何爬取qq音乐歌词到本地
  15. 2017 Google IO 开发者大会直播入口
  16. python爬虫-批量下载qq音乐
  17. mysql 主从1146_浅谈mysql主从同步及错误1146处理
  18. Java理论题(2)——简答题
  19. 兰州烧饼 南阳理工ACM 题目779
  20. jQuery Marquee

热门文章

  1. 金融贷款逾期的模型构建3——模型评估
  2. 写脚本时遇到的一些问题+自己的一些简单总结[小白版]
  3. python写一个文件下载器_python使用tcp实现一个简单的下载器
  4. less 函数_Python中的函数式编程教程,学会用一行代码搞定所有内容
  5. linux 串口编程_ARM-Linux开发与MCU开发有何不同?上篇
  6. 神策数据颜含:流量见顶与监管趋严的双重压力下,大文娱产品如何突围?
  7. 获奖公布 | Hello,SDK!数据采集黑客松大赛完美落幕!(含活动预告)
  8. hadoop目录命令
  9. MySQL高可用的几种方案
  10. 【Android Studio安装部署系列】八、Android Studio主题皮肤更换