每日一題 二叉樹的最近公共祖先

2021-10-24 22:11:29 字數 989 閱讀 2020

題目描述

給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。

示例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。因為根據定義最近公共祖先節點可以為節點本身。

思路

本題用遞迴的解法。若root是p和q的最近公共祖先,則只可能是兩種情況,(1)p和q在root的子樹中,且分別位於異側;(2)root的值與p和q中的其中乙個值相等,另乙個值位於root的子樹中。

通過遞迴對二叉樹進行後續遍歷,當遇到節點p或者q時返回,遞迴結束的標誌為當遇到葉子節點時,直接返回null,當root等於p或者q,直接返回root;用left和right分別標記左子節點和右子節點的返回值,如果left為空,right不為空,則返回right;如果right為空,left不為空,則返回left;若left和right都不空,則說明p和q位於root的異側,root為最近公共祖先,返回root。

分析:最壞情況下需要遍歷樹的所有節點,時間複雜度為o(n),空間複雜度為o(n),即遍歷遞迴的深度達到n。

**

/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

}

二叉樹的最近公共祖先

給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 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,...