difficulty:中等
給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。
中最近公共祖先的定義為:「對於有根樹 t 的兩個結點 p、q,最近公共祖先表示為乙個結點 x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(乙個節點也可以是它自己的祖先)。」
例如,給定如下二叉樹: root = [3,5,1,6,2,0,8,null,null,7,4]
示例 1:
輸入: 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,6,2,0,8,null,null,7,4], p = 5, q = 4
輸出: 5
解釋: 節點 5 和節點 4 的最近公共祖先是節點 5。因為根據定義最近公共祖先節點可以為節點本身。
說明:solution
language:全部題目
不同於二叉搜尋樹的最近公共祖先,本題用遍歷的方法不太合適,嘗試做沒有做出來。考慮如何找到二叉樹的最近公共祖先,首先如果p和q分布在某個根節點的兩側,那麼該根節點便是p和q的最近公共祖先;另外一種情況便是p或者q兩者中乙個節點是另外乙個節點的最近公共祖先。明確了這個方法之後就可以通過分治法遞迴遍歷左右子樹。
比對方式:
LeetCode236 二叉樹最近祖先
思考 這個函式就是查詢p,q兩個節點的祖先,然後給了這棵樹的root,1 它先進行判斷,根節點是不是null 或者根節點是否是p q,要是有乙個是,那祖先就肯定是root 2 它用了遞迴的思想去查詢左右兩個子樹,因為pq的祖先要麼在左邊,要麼就在右邊,所以肯定能找到乙個祖先。3 若找到的left 子...
LeetCode 236 二叉樹最近公共祖先
leetcode 236 二叉樹最近公共祖先 236.二叉樹的最近公共祖先 題目描述 給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。解體思路 分兩部分解決 第一部分 實現判斷兩個結點包含於某根節點的子樹內 第二部分 先序遍歷二叉樹,如果根節點的子樹包含qp目標結點 傳入左孩子,進行遞迴。傳入...
leetcode 236 二叉樹最近公共祖先
給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,null,7,4 示例 1 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 解釋 節點 5 和節點 1 的最近公共祖先是節點 ...