[Leetcode]36.二叉樹的最近公共祖先
阿新 • • 發佈:2021-11-21
題目:
給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。
百度百科中最近公共祖先的定義為:“對於有根樹 T 的兩個節點 p、q,最近公共祖先表示為一個節點 x,滿足 x 是 p、q 的祖先且 x 的深度儘可能大(一個節點也可以是它自己的祖先)。”
示例 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 。因為根據定義最近公共祖先節點可以為節點本身。
示例 3:
輸入:root = [1,2], p = 1, q = 2
輸出:1
思想:深度搜索,找到兩個路徑,遍歷找到公共節點。
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode { var path []*TreeNode var path_p []*TreeNode var path_q []*TreeNode var res *TreeNode var dfs func(root *TreeNode) dfs = func(root *TreeNode){ if root!=nil{ path = append(path,root) if root == p{ path_p =make([]*TreeNode,len(path)) copy(path_p,path) } if root == q{ path_q =make([]*TreeNode,len(path)) copy(path_q,path) } dfs(root.Left) dfs(root.Right) path = path[:len(path)-1] } } dfs(root) for i:=0;i<len(path_q)&&i<len(path_p)&&path_p[i]==path_q[i];i++{ res = path_q[i] } return res }
題目來源:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree