題目一:輸入兩個二叉搜索樹的結點,求兩個結點的最低公共祖先,所謂的最低公共祖先是指距離兩個節點最近的共同祖先。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圖片
待完成!博客