993.二叉樹的堂兄弟節(jié)點(diǎn)
https://leetcode-cn.com/problems/cousins-in-binary-tree/
難度:簡單
題目:
在二叉樹中弊决,根節(jié)點(diǎn)位于深度 0 處吹害,每個(gè)深度為 k 的節(jié)點(diǎn)的子節(jié)點(diǎn)位于深度 k+1 處颤芬。
如果二叉樹的兩個(gè)節(jié)點(diǎn)深度相同,但 父節(jié)點(diǎn)不同 ,則它們是一對堂兄弟節(jié)點(diǎn)筷畦。
我們給出了具有唯一值的二叉樹的根節(jié)點(diǎn) root 继效,以及樹中兩個(gè)不同節(jié)點(diǎn)的值 x 和 y 。
只有與值 x 和 y 對應(yīng)的節(jié)點(diǎn)是堂兄弟節(jié)點(diǎn)時(shí)训措,才返回 true 伪节。否則,返回 false绩鸣。
示例:
示例 1:
輸入:root = [1,2,3,4], x = 4, y = 3
輸出:false
示例 2:
輸入:root = [1,2,3,null,4,null,5], x = 5, y = 4
輸出:true
示例 3:
輸入:root = [1,2,3,null,4], x = 2, y = 3
輸出:false
分析
這是一道標(biāo)準(zhǔn)的二叉樹遞歸搜索問題怀大,當(dāng)然本人更習(xí)慣使用DFS解題。
首先呀闻,根據(jù)題目定義好的TreeNode可以獲取到當(dāng)前節(jié)點(diǎn)的值化借,以及左子樹和右子樹。
我們初始化傳入節(jié)點(diǎn)捡多,父節(jié)點(diǎn)(root沒有父節(jié)點(diǎn)蓖康,傳自身),以及最大深度(初始為0)垒手。
遍歷過程中比較x,y的數(shù)值蒜焊,并記錄深度和父節(jié)點(diǎn),當(dāng)節(jié)點(diǎn)不存在返回即可科贬。
解題:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isCousins(self, root, x, y):
result_x = []
result_y = []
def dfs(node,parent,deep):
if not node:
return
nonlocal result_x, result_y
if node.val == x:
result_x = [parent,deep]
elif node.val == y:
result_y = [parent,deep]
dfs(node.left,node,deep + 1)
dfs(node.right,node,deep + 1)
dfs(root,root,0)
return result_x[0] != result_y[0] and result_x[1] == result_y[1]
歡迎關(guān)注我的公眾號: 清風(fēng)Python泳梆,帶你每日學(xué)習(xí)Python算法刷題的同時(shí),了解更多python小知識。
我的個(gè)人博客:https://qingfengpython.cn