在二叉樹中,根節點位于深度 0 處,每個深度為 k 的節點的子節點位于深度 k+1 處。
如果二叉樹的兩個節點深度相同,但 父節點不同 ,則它們是一對堂兄弟節點。
我們給出了具有唯一值的二叉樹的根節點 root ,以及樹中兩個不同節點的值 x 和 y 。
只有與值 x 和 y 對應的節點是堂兄弟節點時,才返回 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
解題思路
遍歷二叉樹,在二叉樹上面查找兩個目標節點,將第一個搜索到的目標節點記錄其深度和父節點的值,在搜索到了第二個節點以后,對第二個節點的深度和父節點進行判斷,深度必須和第一個節點的一樣,而父節點就不能和第一個節點的一樣
代碼
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/
func isCousins(root *TreeNode, x int, y int) bool {deep:=-1var pre *TreeNodeflag:=falsevar check func(de int,root *TreeNode,parent *TreeNode)check= func(de int, root *TreeNode,parent *TreeNode) {if root==nil{return}if root.Val==x||root.Val==y{if deep!=-1{if de==deep&&parent!=pre{flag=true}}else {deep=depre=parent}}check(de+1,root.Left,root)check(de+1,root.Right,root)}check(0,root,nil)return flag
}