leetcode236 二叉樹的最近公共祖先

2021-10-05 18:51:56 字數 1020 閱讀 6899

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

例如,給定如下二叉樹: root = [3,5,1,6,2,0,8,null,null,7,4]

輸入: root =[3

,5,1

,6,2

,0,8

,null,null,7,

4], p =

5, q =

1輸出:

3解釋: 節點 5 和節點 1 的最近公共祖先是節點 3。

輸入: root =[3

,5,1

,6,2

,0,8

,null,null,7,

4], p =

5, q =

4輸出:

5解釋: 節點 5 和節點 4 的最近公共祖先是節點 5。因為根據定義最近公共祖先節點可以為節點本身。

方法一:

如果當前根節點root==p或者root ==q,則表明當前節點就是根節點,直接返回。

否則在root的左子樹和右子樹中分別判斷。

如果返回的左子樹和右子樹都不為空,表示p和q分別在左子樹和右子樹中,因此當前節點是公共節點。

如果左子樹或者右子樹為空,表示p和q在另一邊的子樹中,返回子樹即可。

class

solution

};

方法二:

建立乙個map用來存放當前節點和他的父節點。建立完成後在map中找到p和q兩個節點。此時可以將p和q看做是煉表頭,判斷p和q是否相交,如果相交,找到第乙個相交節點。

class

solution

return qnode;

}void

dfs(treenode* root)

if(root-

>right)}}

;

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