leetcode236 二叉樹的最近公共祖先

2021-10-09 18:37:02 字數 986 閱讀 5562

給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。

複雜度分析

我們可以用雜湊表儲存所有節點的父節點,然後我們就可以利用節點的父節點資訊從 p 結點開始不斷往上跳,並記錄已經訪問過的節點,再從 q 節點開始不斷往上跳,如果碰到已經訪問過的節點,那麼這個節點就是我們要找的最近公共祖先。

具體步驟如下:

從根節點開始遍歷整棵二叉樹,用雜湊表記錄每個節點的父節點指標。

從 p 節點開始不斷往它的祖先移動,並用資料結構記錄已經訪問過的祖先節點。

同樣,我們再從 q 節點開始不斷往它的祖先移動,如果有祖先已經被訪問過,即意味著這是 p 和 q 的深度最深的公共祖先,即 lca 節點。

class

solution

private

boolean

dfs(treenode root, treenode p, treenode q)

return lson || rson || root.val == p.val || root.val == q.val;

}public treenode lowestcommonancestor

(treenode root, treenode p, treenode q)

}

class

solution

if(root.right != null)

}public treenode lowestcommonancestor

(treenode root, treenode p, treenode q)

while

(q != null)

q = parent.

get(q.val);}

return null;

}}

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 的最近公共祖先是節點 ...