Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”
_______3______ / \ ___5__ ___1__ / \ / \ 6 _2 0 8 / \ 7 4
For example, the lowest common ancestor (LCA) of nodes 5 and 1 is 3 . Another example is LCA of nodes 5 and 4 is 5 , since a node can be a descendant of itself according to the LCA definition.
<Solution>這題是 235. Lowest Common Ancestor of a Binary Search Tree 的衍生題
差別在於,這次的 data structure 不是 BST 而是一般的 binary tree 而已
那想法也是使用 recursive 來解(DFS)
想法如下
- 如果能分別在左右兩個子樹,各自找到 v 和 w,那麼當下的 root 就是 LCA
- 如果分別找左右兩個子樹時,只能找到 v 或 w,也就是只能找到一個,那麼就代表 v 和 w 在同一邊,且找到的那個節點就是 LCA
code 如下
Java
沒有留言:
張貼留言