第三十七题 求取二叉树中节点的最低公共节点
来源:互联网 发布:用java编写三角形 编辑:程序博客网 时间:2024/06/05 08:59
题目:二叉树的结点定义如下:
struct TreeNode
{
int m_nvalue;
TreeNode* m_pLeft;
TreeNode* m_pRight;
};
输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点
思路:求取2个节点的公共节点,如果2个节点分别在左右子树上,则其根节点为公共节点,如果2个节点都在左子树或者右子树上,则在左子树或者右子树上求取公共最低节点
#include <iostream>#include <assert.h>using namespace std;struct treenode{int t_value;treenode *t_left;treenode *t_right;};void maketree(treenode *&ptr,int value){if (ptr==nullptr){treenode *currentnode=new treenode();currentnode->t_value=value;currentnode->t_left=nullptr;currentnode->t_right=nullptr;ptr=currentnode;}else{if (value>ptr->t_value){maketree(ptr->t_right,value);}else{maketree(ptr->t_left,value);}}}//在树中搜索cnode,得出cnode属于左树还是右树bool findnode(const treenode *head,const treenode *cnode){assert(head!=nullptr&&cnode!=nullptr);if (head==cnode){return true;}bool havenode=false;if (head->t_left!=nullptr){havenode=findnode(head->t_left,cnode);}if (havenode==false&&head->t_right!=nullptr){havenode=findnode(head->t_right,cnode);}return havenode;}//查找公共最低节点treenode *findbostnode(treenode *head,const treenode *firstnode,const treenode *secondnode){assert(head!=nullptr&&firstnode!=nullptr&&secondnode!=nullptr);bool leftnode1=false;bool leftnode2=false;if (head->t_left!=nullptr){leftnode1=findnode(head->t_left,firstnode);leftnode2=findnode(head->t_left,secondnode);}if (leftnode1&&leftnode2){if (head->t_left==firstnode||head->t_left==secondnode){return head;}return findbostnode(head->t_left,firstnode,secondnode);}bool rightnode1=false;bool rightnode2=false;if (head->t_left!=nullptr){if (!leftnode1){rightnode1=findnode(head->t_right,firstnode);}if (!leftnode2){rightnode2=findnode(head->t_right,secondnode);}}if (rightnode1&&rightnode2){if (head->t_right==firstnode||head->t_right==secondnode){return head;}return findbostnode(head->t_right,firstnode,secondnode);}if ((leftnode1&&rightnode2)||(leftnode2&&rightnode1)){return head;}}int main(){treenode *ptr=nullptr;maketree(ptr,12);maketree(ptr,6);maketree(ptr,3);maketree(ptr,2);maketree(ptr,4);maketree(ptr,8);maketree(ptr,7);treenode *firstnode=ptr->t_left->t_left->t_left;treenode *secondnode=ptr->t_left->t_right->t_left;treenode *resultnode=nullptr;resultnode=findbostnode(ptr,firstnode,secondnode);cout<<resultnode->t_value<<endl;return 0;}
0 0
- 第三十七题 求取二叉树中节点的最低公共节点
- 二叉树中两个节点的最低公共父节点
- 二叉树的最低公共父节点
- 二叉树的最低公共父节点
- 二叉树中查找两个节点的最低公共祖先
- 求二叉树中两个节点的最低公共祖先
- 二叉树中两个节点的最低公共祖先
- 求二叉树中两个节点的最低公共祖先
- 求二叉树两节点的最低公共节点
- 求二叉树中两个节点p,q的最低公共祖先节点
- 求二叉树中两个节点的最低公共祖先节点
- 二叉树中寻找共同节点的最低公共祖先节点
- 找出二叉树中任意两个节点的最低公共父节点
- 求二叉树中两个节点的最低公共祖先节点
- 树中两个节点的最低公共父节点
- 二叉树最低公共父节点
- 寻找二叉树两个节点的最低公共祖先(LCA)
- 二叉树两个节点的最低公共最先问题
- 易信公众平台开发从入门到精通之获取凭证
- Codeforces 439A Devu, the Singer and Churu, the Joker
- 浏览器兼容问题汇总
- ZOJ-1831
- VS08调C数据结构
- 第三十七题 求取二叉树中节点的最低公共节点
- Codeforces 439B Devu, the Dumb Guy
- 第一篇——第一文 SQL Server 备份基础
- Hadoop2.2.0下通过编译单词统计例子WordCount.java熟悉如何编译自己的程序
- Android SDK 下载地址
- css和js的浏览器不兼容问题汇总
- C和指针 学习笔记-1.编译与链接
- 青蛙的约会
- 带权二分图最佳匹配KM算法模板