leetcode 236 二叉樹的最近公共祖先

2021-10-02 16:42:31 字數 1302 閱讀 7132

解決辦法:

方法一: 

遞迴遍歷 節點只能在左邊或者右邊,left 不為空,right為空,公共祖先是left;left為空,right不為空,公共祖先是right,left和right都不為空,公共祖先是root
方法二:

尋找兩個節點的路徑,找到第乙個不相等的節點,返回上乙個節點
**:

public static void main(string args) 

/*** @description: 二叉樹的最近公共祖先

* 遞迴遍歷 節點只能在左邊或者右邊,left 不為空,right為空,公共祖先是left;left為空,right不為空,公共祖先是right,left和right都不為空,公共祖先是root

* @date: 2020/2/9 22:55

* @author: fuguowen

* @return

* @throws

*/public static treenode lowestcommonancestor(treenode root, treenode p, treenode q)

if(root==p || root==q)

treenode left = lowestcommonancestor(root.left, p, q);

treenode right = lowestcommonancestor(root.right, p, q);

if(left==null)

if(right==null)

if(left!=null && right!=null)

return root;

}/**

* @description: 二叉樹的公共祖先

* @date: 2020/2/9 22:54

* @author: fuguowen

* @return

* @throws

*/public static treenode lowestcommonancestor2(treenode root, treenode p, treenode q)

pathlist.addlast(root);

if(root.val==p.val)

findparentnode(root.left,p,pathlist,resultlist,flag);

findparentnode(root.right,p,pathlist,resultlist,flag);

pathlist.removelast();

}

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