劍指offer【68】:二叉樹最近祖先節點

題目:

 

思路+代碼:

思路:找就近的祖先節點,採用遞歸方法,考慮3種邊界情況,
邊界情況:
1. p,q在左右兩邊
2. p,q都在左子樹或右子樹
3. p或q有一個是根節點
遞歸結束:如果not root, 找到節點爲p或q,return root
當前層遞歸:
返回值:在左子樹和右子樹進行遞歸,並判斷如果左子樹返回值爲空,則說明左子樹不存在,則返回右子樹,同理右子樹; 如果左右子樹同時存在值則返回 root爲最近祖先節點

class Solution:
    def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:
        # 思路:找就近的祖先節點,採用遞歸方法,考慮3種邊界情況,
        #     邊界情況:
        #       1. p,q在左右兩邊
        #       2. p,q都在左子樹或右子樹
        #       3. p或q有一個是根節點
        #       遞歸結束:如果not root, 找到節點爲p或q,return root
        #       當前層遞歸:
        #       返回值:在左子樹和右子樹進行遞歸,並判斷如果左子樹返回值爲空,則說明左子樹不存在,則返回右子樹,同理右子樹; 如果左右子樹同時存在值則返回 root爲最近祖先節點
        if not root or root==p or root == q: return root
        left = self.lowestCommonAncestor(root.left, p, q)
        right = self.lowestCommonAncestor(root.right, p, q)
        if not left: return right
        if not right: return left
        return root # 如果left 和 right都不爲空,則返回根節點

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章