判断二叉树中两个节点的最低共同父节点
来源:互联网 发布:龙江网络客服中心电话 编辑:程序博客网 时间:2024/04/29 00:43
题目:二叉树的结点的定义如下:
struct TreeNode { int m_nValue; TreeNode *m_pLeft; TreeNode *m_pRight;};
输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。
答:
#include "stdafx.h"#include <iostream>#include <fstream>#include <ctime>using namespace std;struct TreeNode { int m_nValue; TreeNode *m_pLeft; TreeNode *m_pRight;};//假定所创建的二叉树如下图所示/* 1 / \ 2 3 / \ / 4 3 6 / \ \ / \ 7 8 9 10 11 / \ 12 13 / 14*/void CreateBitree(TreeNode *&pNode, fstream &fin, TreeNode *&pNodeOne, TreeNode *&PNodeTwo){ int dat; fin>>dat; if(dat == 0) { pNode = NULL; } else { pNode = new TreeNode(); pNode->m_nValue = dat; if (NULL == pNodeOne && !(rand() % 3)) { pNodeOne = pNode; } if (NULL == PNodeTwo && !(rand() % 5)) { PNodeTwo = pNode; } CreateBitree(pNode->m_pLeft, fin, pNodeOne, PNodeTwo); CreateBitree(pNode->m_pRight, fin, pNodeOne, PNodeTwo); }}//寻找二叉树两个结点的最低共同父节点TreeNode *FindFirstCommonParentNode(TreeNode *pRoot, TreeNode *pNodeOne, TreeNode *pNodeTwo){ if (NULL == pRoot) { return NULL; } if (pRoot == pNodeOne || pRoot == pNodeTwo) { return pRoot; } TreeNode *pLeft = FindFirstCommonParentNode(pRoot->m_pLeft, pNodeOne, pNodeTwo); TreeNode *pRight = FindFirstCommonParentNode(pRoot->m_pRight, pNodeOne, pNodeTwo); if (NULL == pLeft) //1、左子树没有找到任何一个结点,则第一个公共父节点必定在右子树,而且找到第一个结点就是最低共同父节点 { return pRight; } else if (NULL == pRight) //2、右子树没有找到任何一个结点,则第一个公共父节点必定在左子树,而且找到第一个结点就是最低共同父节点 { return pLeft; } else //3、分别在结点的左右子树找到,则此节点必为第一个公共父节点 { return pRoot; }}int _tmain(int argc, _TCHAR* argv[]){ srand((unsigned)time(NULL)); fstream fin("tree.txt"); TreeNode *pRoot = NULL; TreeNode *pNodeOne = NULL; TreeNode *pNodeTwo = NULL; TreeNode *pParent = NULL; CreateBitree(pRoot, fin, pNodeOne, pNodeTwo); pParent = FindFirstCommonParentNode(pRoot, pNodeOne, pNodeTwo); cout<<"第一个结点为:"<<pNodeOne->m_nValue<<endl; cout<<"第二个结点为:"<<pNodeTwo->m_nValue<<endl; cout<<"首个父结点为:"<<pParent->m_nValue<<endl; cout<<endl; return 0;}
- 判断二叉树中两个节点的最低共同父节点
- 判断二叉树中两个节点的最低共同父节点
- 二叉树两个最低的共同父节点
- 寻找二叉树两个结点的最低共同父节点
- 二叉树中两个节点的最低公共父节点
- 程序员面试100题之五 二叉树两个节点的最低共同父节点
- 二叉树中任意两节点的最低共同父节点
- 寻找二叉树两个结点的最低共同父节点(2014京东笔试题)
- 二叉树中寻找共同节点的最低公共祖先节点
- 找出二叉树中任意两个节点的最低公共父节点
- 二叉搜索树中任意两个节点的最近共同父父节点1(LCA问题)
- 二叉搜索树中任意两个节点的最近共同父父节点2(LCA问题)
- 树中两个节点的最低公共父节点
- 二叉树中查找两个节点的最低公共祖先
- 求二叉树中两个节点的最低公共祖先
- 二叉树中两个节点的最低公共祖先
- 求二叉树中两个节点的最低公共祖先
- 两棵二叉树的最低共同节点
- C++_静态局部变量求阶乘
- Android findbugs
- 用javascritserilization序列化列表或对象后的有时间的列表
- MyEclipse Update Progress Error解决方法
- 编码--大总结,一致性
- 判断二叉树中两个节点的最低共同父节点
- C++_静态局部变量的值在函数结束后不会释放,也不会被外部调用
- 嵌入式系统学习认知
- 贴码了
- 解读Hibernate继承映射策略
- 数据库约束——用户定义完整性(User-defined Integrity)
- orcal的日期函数
- environment.NewLine
- 找出两个链表的第一个公共结点