劍指Offer 68 二叉樹的最近公共祖先

2021-10-05 16:59:00 字數 919 閱讀 6037

迴圈搜尋: 當節點 root 為空時跳出;

當 p, q都在 root 的 右子樹 中,則遍歷至 root.right ;

否則,當 p, q 都在 root 的 左子樹 中,則遍歷至 root.left ;

否則,說明找到了 最近公共祖先 ,跳出。

返回值: 最近公共祖先 root 。

treenode* lowestcommonancestor(treenode* root, treenode* p, treenode* q) 

return root;

}

這道題採用遞迴來做,後序遍歷的典型題:遞迴體分為3種情況討論

如果p和q分別是root的左右節點,那麼root就是我們要找的最近公共祖先

如果p和q都是root的左節點,那麼返回lowestcommonancestor(root.left,p,q)

如果p和q都是root的右節點,那麼返回lowestcommonancestor(root.right,p,q)

邊界條件的處理稍微麻煩一些:

如果root是null,則說明我們已經找到最底了,返回null表示沒找到

如果root與p相等或者與q相等,則返回root

如果左子樹沒找到,遞迴函式返回null,證明p和q同在root的右側,那麼最終的公共祖先就是右子樹找到的結點

如果右子樹沒找到,遞迴函式返回null,證明p和q同在root的左側,那麼最終的公共祖先就是左子樹找到的結點

treenode* lowestcommonancestor(treenode* root, treenode* p, treenode* q) 

else if(rightnode == nullptr)

else

}

劍指Offer68 II 二叉樹的最近公共祖先

不能覆蓋p,q其中乙個是另乙個的祖先的情況 class solution else if l r return true 其中一棵子樹找到了p或q,往上層傳遞 else return false 兩棵廢物子樹,都找不到p,q treenode lowestcommonancestor treenod...

劍指Offer 68 II 二叉樹的最近公共祖先

劍指offer contents思路2 到p,q的路徑的最後共同節點 解答解答2 到p,q的路徑的最後共同節點 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 解釋 節點 5 和節點 1 的最近公共祖先是節點 3。示例 2 輸入 root 3,5,1...

劍指offer 二叉樹 二叉樹搜尋樹

package bst import j a.util.public class bst if pre.length 0 in.length 0 treenode root new treenode pre 0 for int i 0 i in.length i return root 判斷給定陣列...