演算法題 求二叉樹的最近公共祖先

2022-07-29 19:09:12 字數 762 閱讀 7335

思路一:非遞迴方法

1. 找到兩個節點的路徑的逆序鍊錶,將題轉換成兩個鍊錶第乙個公共節點的問題。

1.2 兩個鍊錶求第乙個公共節點

class

solution

return

node1;}};

2. 找到兩個節點的路徑,將其儲存到兩個陣列中,遍歷兩個陣列,返回兩個陣列第一次不相等的上乙個節點。

思路二:遞迴方法

def

solution(root, p, q):

if root == none or p == root or q ==root:

return

root

left =solution(root.left, p, q)

right =solution(root.right, p, q)

if left and

right:

return

root

ifnot left and

notright:

return

none

ifnot left and

right:

return

right

ifnot right and

left:

return left

參考

二叉樹的最近公共祖先

給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,null,7,4 思路 剛開始使用boolean來判斷要查詢的兩節點在左右孩子上,後面修改為使用treenode與null判斷兩節點位置 1 分別向左孩子和右孩子遞迴。2 若當...

二叉樹的最近公共祖先

輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 4 輸出 5 法1 分別找出根節點到兩個節點的路徑,則最後乙個公共節點就是最低公共祖先。法2 public treen...

二叉樹的最近公共祖先

例如,給定如下二叉樹 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 的最近公共祖先是節點 3。示例 2 輸入 root 3,5,1,6,2,0,...