019写程序在一棵二叉树中找到两个结点的最近共同祖先(keep it up)
来源:互联网 发布:led走字屏改字软件 编辑:程序博客网 时间:2024/06/05 11:13
写程序在一棵二叉树中找到两个结点的最近共同祖先。
分两种情况来讨论这个题:
第一种情况结点中没有指向父结点的指针
第二种情况接种有指向父节点的指针
我们先看第一种情况,结点中没有指向父结点的指针。
我们可以采用暴力搜索每一个结点,如果这个结点的子树中
有已知的两个结点,那我们就继续沿着左右子树找,如果左子树
能找到,我们就继续沿着左子树找,如果有子树能找到,我们就
分两种情况来讨论这个题:
第一种情况结点中没有指向父结点的指针
第二种情况接种有指向父节点的指针
我们先看第一种情况,结点中没有指向父结点的指针。
我们可以采用暴力搜索每一个结点,如果这个结点的子树中
有已知的两个结点,那我们就继续沿着左右子树找,如果左子树
能找到,我们就继续沿着左子树找,如果有子树能找到,我们就
沿着右子树找,不存在两个子树都能够找到。
代码:
struct STreeNode{int Data;STreeNode *pLChild;STreeNode *pRChild;};bool isFather(STreeNode *vRoot, STreeNode *vSubNode){if (vRoot == NULL) return false;else (if vRoot == vSubNode) return true;bool Temp = isFather(vRoot->pLChild, vSubNode);if (!Temp){Temp = isFather(vRoot->pRChild, vSubNode);}return Temp;}void findNearestAncestor(STreeNode *vRoot, STreeNode *vNodeA, STreeNode *vNodeB, STreeNode *&voAns){if (vRoot == NULL || vNodeA == NULL || vNodeB == NULL) return;bool FindRes = isFather(vRoot, vNodeA) && isFather(vRoot, vNodeB);if (FindRes){voAns = vRoot;findNearestAncestor(vRoot->pLChild, vNodeA, vNodeB, voAns);findNearestAncestor(vRoot->pRChild, vNodeA, vNodeB, voAns);}}int main(){return 0;}
在看第二种情况比较简单,如果有指向父结点的指针,我们可以搜索第一个结点的
父节点,然后判断是不是第二个已知结点的父结点。
代码:
struct TreeNode{int data;TreeNode* leftChild;TreeNode* rightChild;TreeNode* parent;};//用父结点bool findNearestAncestor2(const TreeNode* vNodeA, const TreeNode* vNodeB, TreeNode *vAncestor){if (isFather(vNodeA, vNodeB)){vAncestor = vNodeA;return true;}if (isFather(vNodeB, vNodeA)){vAncestor = vNodeB;return true;}TreeNode* Parent = vNodeA->parent;while (true){if (isFather(Parent, vNodeB)){vAncestor = Parent;return true;}Parent = Parent->parent;}return false;}
0 1
- 019写程序在一棵二叉树中找到两个结点的最近共同祖先(keep it up)
- 求二叉树两结点最近的共同祖先结点
- 求二叉树中两个结点的最近公共祖先
- 二叉树系列---在二叉树中找到两个节点的最近公共祖先
- 二叉树中找到两个节点的最近公共祖先
- 求二叉树中任意两结点的最近共同祖先的算法及其证明
- (016)给定一个有序数组(递增),写程序构建一棵具有最小高度的二叉树(keep it up)
- 在二叉树中找到两个节点的最近公共祖先
- 在二叉树中找到两个节点的最近公共祖先
- 求二叉树T中结点a和b的最近共同祖先
- 二叉树两个结点的第一个共同祖先
- 018给定二叉查找树的一个结点, 写一个算法查找它的“下一个”结点“(keep it up)
- 二叉树------寻找二叉树中两个结点的最近公共祖先
- 第19题 在二叉查找树中找到两个结点的最低公共祖先 Lowest Common Ancestor
- 求二叉树中两个节点的最近公共祖先结点
- 【数据结构】求二叉树中两个结点最近的公共祖先
- 二叉树中找两个结点的最近的公共祖先结点
- 二叉树中找两个结点的最近公共祖先结点
- 【解决】centos6.2 spark cluster问题(持续追加)
- Spark1.0.0 history server 配置
- Brackets Sequence(记搜)
- hdu4747(线段树区间更新)
- 程序中的keywords的缩写记录
- 019写程序在一棵二叉树中找到两个结点的最近共同祖先(keep it up)
- 软件系统开发中的数据交换协议
- 单例模式
- MinGW安装
- Spark1.0.0 运行架构基本概念
- spark比较好的博客
- search.c
- server.c
- 服务器server.c、搜索serach.c