首页 > 编程知识 正文

leetcode top100(leetcode难度)

时间:2023-05-04 14:23:19 阅读:100407 作者:2774

题目

给你二叉树的根节点根和一个整数距离。

如果二叉树中两个叶节点之间的最短路径长度小于或者等于距离,那它们就可以构成一组好叶子节点对。

返回树中好叶子节点对的数量。

示例1:输入:根=[1,2,3,null,4],距离=3输出:1

解释:树的叶节点是3和4 ,它们之间的最短路径的长度是3 。这是唯一的好叶子节点对。

示例2:输入:根=[1,2,3,4,5,6,7],距离=3输出:2

解释:好叶子节点对为[4,5] 和[6,7] ,最短路径长度都是2 。

但是叶子节点对[4,6] 不满足要求,因为它们之间的最短路径长度为4 。

示例3:输入:根=[7,1,4,6,null,5,3,null,null,null,null,null,null,2],距离=3输出:1

解释:唯一的好叶子节点对是[2,5] 。

示例4:输入:根=[100],距离=1输出:0

示例5:输入:根=[1,1,1],距离=2输出:1

提示:树的节点数在[1, 2^10] 范围内。

每个节点的值都在[1, 100] 之间。

1=距离=10

解题思路分析

1、递归;时间复杂度O(n),空间复杂度O(n)

func countPairs(root *TreeNode,distance int) int {

_,res :=dfs(根,距离)

返回资源

}

func dfs(root *TreeNode,distance int) (arr []int,count int){ 0

arr=make([]int,距离2)

if root==nil {

返回arr,0

}

如果根左==零根。右==零

arr[1]=1

返回arr,0

}

leftArr,rightArr :=make([]int,距离1)、make([]int、距离1)

左计数,右计数:=0,0

如果根。向左!=零

leftArr,leftCount=dfs(根。左侧,距离)

}

如果根。没错。=零

rightArr,rightCount=dfs(根.右侧,距离)

}

对于I :=1;i=距离;我

arr[i 1]=leftArr[i] rightArr[i]

}

计数=0

对于I :=0;i=距离;我

对于j :=0;j=距离-我;j {

计数=计数左arr[I]*右arr[j]

}

}

返回,向左数,向右数

}2、递归;时间复杂度O(n),空间复杂度O(n)

var res int

func countPairs(root *TreeNode,distance int) int {

res=0

根,距离

返回资源

}

func dfs(root *TreeNode,distance int)(arr[]int){ 0

arr=make([]int,距离2)

if root==nil {

返回逮捕

}

如果根左==零根。右==零

arr[1]=1

返回逮捕

}

leftArr,rightArr :=make([]int,距离1)、make([]int、距离1)

如果根。向左!=零

leftArr=dfs(根。左侧,距离)

}

如果根。没错。=零

rightArr=dfs(根。右侧,距离)

}

对于I :=1;i=距离;我

arr[i 1]=leftArr[i] rightArr[i]

}

对于I :=0;i=距离;我

对于j :=0;j=距离-我;j {

res=res leftArr[i]*rightArr[j]

}

}

返回逮捕

}

总结

中等题目,二叉树题目,使用递归

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。