迴圈搜尋: 當節點 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 判斷給定陣列...