C 深搜 查詢兩節點的最近父節點

2021-10-23 17:17:59 字數 1549 閱讀 3811

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

例如,給定如下二叉樹: 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,8,null,null,7,4], p = 5, q = 4

輸出: 5

解釋: 節點 5 和節點 4 的最近公共祖先是節點 5。因為根據定義最近公共祖先節點可以為節點本身。

說明:所有節點的值都是唯一的。

p、q 為不同節點且均存在於給定的二叉樹中。

最近祖先如圖所示:

解法並不難,主要就是通過深度搜尋找到所尋節點的位置和路徑,通過vector儲存該節點的路徑,當子節點不存在,回溯到上一節點的另一節點進行查詢,若已找到節點(用finish=1表示),之後依然結束深搜。

則結束之後便是比較兩個節點路徑的共同父節點,最後乙個共同的節點就是最近公共祖先。

過程展示如下:

實現**如下:

struct treenode };

class

solution

else

treenode* result =0;

for(

int i =

0; i < path_len; i++)}

return result;

}private

:void

preorder

(treenode* node, treenode* search, vector

>

&path, vector

>

&result,

int finish)

path.

push_back

(node);if

(node == search)

preorder

(node-

>left, search, path, result, finish)

;preorder

(node-

>right, search, path, result, finish)

; path.

pop_back()

;}};

二叉樹中任意兩節點的最近父祖先

分析 1.二叉樹是 二叉搜尋樹 左節點小於父節點,右節點大於父節點 思路 從根節點開始,如果當前節點比兩個節點都大,則在左子樹 如比當前節點都小,則在右子樹 以此類推,直到找到乙個節點的大小介於兩節點之間,則該節點就是最近的公共父節點 2.非二叉搜尋樹,但有指向父節點的指標域 思路 分別從兩個節點開...

查詢兩個不同元素最近的父節點

題目描述 查詢兩個節點的最近的乙個共同父節點,可以包括節點自身 輸入描述 onode1 和 onode2 在同一文件中,且不會為相同的節點 解題思路1 採用dom規範中的node.contains方法,先檢查節點onode1和onode2的相互包含關係,若兩個之間存在包含關係,則返回包含另乙個元素的...

證明兩節點能正常failover的sql

select instance name,host name,null as failover type,null as failover method,null as failed over from v instance union select null,null,failover type,...