题目一:输入两个二叉搜索树的结点,求两个结点的最低公共祖先,所谓的最低公共祖先是指距离两个节点最近的共同祖先。yii
例如:
spa
解题思路:指针
小于
根节点,那么它们的最低公共祖先就必定在它左子树。大于
根节点,那么它们的最低公共祖先就必定在它右子树。一个结点的值大于根节点的值
,一个结点的值小于根节点的值
,那么这个根节点就是它的最低公共祖先。 //求两个节点的最低公共祖先(递归解法) BSTreeNode* GetCommenParent_R(BSTreeNode* root, BSTreeNode* bstn1, BSTreeNode* bstn2) { if (root == NULL || bstn1 == NULL || bstn2 == NULL) return NULL; if ((bstn1->_data < root->_data) && (bstn2->_data< root->_data)) { GetCommenParent_R(root->_left, bstn1, bstn2); } else if ((bstn1->_data>root->_data) && (bstn2->_data>root->_data)) { GetCommenParent_R(root->_right, bstn1, bstn2); } else return root; }
题目二:假设在修改一下上述题目的条件,所给的树不是一棵二叉搜索树,甚至不是一棵二叉树,只是一棵简单的树
,可是树中的结点存在着指向父节点的指针
,那么要怎么求出两个结点的最低公共祖先呢?
code
解决思路:转换题目。
blog
3->12->32,78->45->32
求两条链表的第一个公共结点位于个人另外一篇博客: 递归
https://weheartit.com/5QkVAOpNOjUHk
https://weheartit.com/UUVryii4I2Q9
https://weheartit.com/uYjLBGRUfWqD图片
待完成!博客