leetcode 993 二叉樹的堂兄弟節點

2021-10-25 09:17:29 字數 2162 閱讀 5713

這道題給出二叉樹root,x和y,要解決的問題是在樹中找到x和y,並且確定它們是否為堂兄弟節點的關係。

佇列實現、bfs

廣度優先遍歷每一層,存入佇列中,判斷x和y是否在同一層,如果在,就是判斷是否為堂兄弟節點。在同一層中,只有相鄰節點並且右邊的節點的索引為奇數、左邊節點索引為偶數時,才是同乙個父節點。如果不滿足上面條件,則就是堂兄弟節點

遞迴dfs

深度優先搜尋標記每乙個節點,對於每個節點,都儲存它的父親節點和深度到對應的字典中,最後判斷x和y在這兩個字典中的值就可以了

bfs法

class

treenode

:def

__init__

(self, val=

0, left=

none

, right=

none):

self.val = val

self.left = left

self.right = right

class

solution

(object):

defiscousins

(self,root,x,y)

: ans =

[root]

while ans:

tmp =

# 儲存本層的所有值

n =len(ans)

# 每次迴圈拿一層的陣列

for i in

range

(n):

#這個迴圈把所有節點值存入tmp,然後ans存入每個點的左右孩子

r = ans.pop(0)

#每乙個節點

if r:

#秘訣在這裡,把左右孩子放回去

else

:none

)#如果是空結點,方便判斷是否為同一父節點

print

(tmp)

if x in tmp and y in tmp:

left = tmp.index(x)

#獲取x的索引位置

right = tmp.index(y)

if left>right:

# l比r大,調整一下,方便判斷,保證r比l大

left,right=right,left

if right-

1== left and right%2!=

0:#只有l,r相鄰並且r為奇數時(l為偶數),才是同一父節點

return

false

return

true

return

false

t = treenode(val=

1,left=treenode(val=

2,left=treenode(4)

,right=treenode(5)

),right=treenode(val=

3,left=treenode(6)

,right=treenode(7)

))s = solution(

)s.iscousins(t,5,

7)

dfs遞迴
class

solution

(object):

defiscousins

(self,root,x,y)

: parent =

#節點的值對應它的parent

depth =

# 節點值對應它的深度

defdfs

(node,par=

none):

if node:

depth[node.val]=1

+ depth[par.val]

if par else

0 parent[node.val]

= par

dfs(node.left,node)

dfs(node.right,node)

dfs(root)

return depth[x]

==depth[y]

and parent[x]

!= parent[y]

復 雜度

分析

:\color

複雜度分析:

bfs

dfs

LeetCode 993 二叉樹的堂兄弟節點

題目 在二叉樹中,根節點位於深度 0 處,每個深度為 k 的節點的子節點位於深度 k 1 處。如果二叉樹的兩個節點深度相同,但父節點不同,則它們是一對堂兄弟節點。我們給出了具有唯一值的二叉樹的根節點 root,以及樹中兩個不同節點的值 x 和 y。只有與值 x 和 y 對應的節點是堂兄弟節點時,才返...

Leetcode 993二叉樹的堂兄弟節點

在二叉樹中,根節點位於深度 0 處,每個深度為 k 的節點的子節點位於深度 k 1 處。如果二叉樹的兩個節點深度相同,但父節點不同,則它們是一對堂兄弟節點。我們給出了具有唯一值的二叉樹的根節點 root,以及樹中兩個不同節點的值 x 和 y。只有與值 x 和 y 對應的節點是堂兄弟節點時,才返回 t...

leetcode 二叉樹 對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3 方法一 遞迴 思路 如果乙個樹的左子樹與右子樹映象對稱,則該樹是對稱的 兩個樹互為映象的...