給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。
例如,給定如下二叉樹: 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解釋:節點示例 2:5
和節點1
的最近公共祖先是節點3。
輸入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4輸出:5解釋:節點說明:解題思路:5
和節點4
的最近公共祖先是節點5。
因為根據定義最近公共祖先節點可以為節點本身。
注意p,q必然存在樹內, 且所有節點的值唯一!!!
遞迴思想, 對以root為根的(子)樹進行查詢p和q, 如果root == null || p || q 直接返回root
表示對於當前樹的查詢已經完畢, 否則對左右子樹進行查詢, 根據左右子樹的返回值判斷:
1. 左右子樹的返回值都不為null, 由於值唯一左右子樹的返回值就是p和q, 此時root為lca
2. 如果左右子樹返回值只有乙個不為null, 說明只有p和q存在與左或右子樹中, 最先找到的那個節點為lca
3. 左右子樹返回值均為null, p和q均不在樹中, 返回null
/**
* definition for a binary tree node.
* public class treenode
* }*/class solution
if(root ==p || root==q)
treenode left=lowestcommonancestor(root.left,p,q);
treenode right=lowestcommonancestor(root.right,p,q);
if(left!=null && right!=null)else if(left!=null)else if(right!=null)
return null;}}
236 二叉樹最近公共祖先
給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。最近公共祖先的定義為 對於有根樹 t 的兩個結點 p q,最近公共祖先表示為乙個結點 x,滿足 x 是 p q 的祖先且 x 的深度盡可能大 乙個節點也可以是它自己的祖先 例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,nu...
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 的最近公共祖先是節點 ...
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 的最近公共祖先是節點 ...