鱼C论坛

 找回密码
 立即注册
查看: 2393|回复: 0

[技术交流] C++刷LeetCode(1530. 好叶子节点对的数量)【深度优先搜索】

[复制链接]
发表于 2020-7-31 12:12:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述:
  1. 给你二叉树的根节点 root 和一个整数 distance 。

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

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

  4.  

  5. 示例 1:

  6.  



  7. 输入:root = [1,2,3,null,4], distance = 3
  8. 输出:1
  9. 解释:树的叶节点是 3 和 4 ,它们之间的最短路径的长度是 3 。这是唯一的好叶子节点对。
  10. 示例 2:



  11. 输入:root = [1,2,3,4,5,6,7], distance = 3
  12. 输出:2
  13. 解释:好叶子节点对为 [4,5] 和 [6,7] ,最短路径长度都是 2 。但是叶子节点对 [4,6] 不满足要求,因为它们之间的最短路径长度为 4 。
  14. 示例 3:

  15. 输入:root = [7,1,4,6,null,5,3,null,null,null,null,null,2], distance = 3
  16. 输出:1
  17. 解释:唯一的好叶子节点对是 [2,5] 。
  18. 示例 4:

  19. 输入:root = [100], distance = 1
  20. 输出:0
  21. 示例 5:

  22. 输入:root = [1,1,1], distance = 2
  23. 输出:1
  24.  

  25. 提示:

  26. tree 的节点数在 [1, 2^10] 范围内。
  27. 每个节点的值都在 [1, 100] 之间。
  28. 1 <= distance <= 10

  29. 来源:力扣(LeetCode)
  30. 链接:https://leetcode-cn.com/problems/number-of-good-leaf-nodes-pairs
  31. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码


  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. *     int val;
  5. *     TreeNode *left;
  6. *     TreeNode *right;
  7. *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8. *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9. *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10. * };
  11. */
  12. class Solution {
  13. public:
  14.     vector<int> dfs(TreeNode* root, int distance, int& res){
  15.         if(root == NULL)return {};
  16.         if(root -> left == NULL && root -> right == NULL)return {0};
  17.         vector<int> re;
  18.         vector<int> temp1 = dfs(root -> left, distance, res);
  19.         for(auto& cha : temp1){
  20.             if(++cha > distance)continue;//左边要加上右边,所以至少也要++cha这么多距离
  21.             re.push_back(cha);
  22.         }
  23.         vector<int> temp2 = dfs(root -> right, distance, res);
  24.         for(auto & cha : temp2){
  25.             if(++cha > distance)continue;
  26.             re.push_back(cha);
  27.         }
  28.         for(auto & l : temp1){
  29.             for(auto & r : temp2){
  30.                 res += (l + r <= distance);
  31.             }
  32.         }
  33.         return re;
  34.     }
  35.     int countPairs(TreeNode* root, int distance) {
  36.         int res = 0;
  37.         dfs(root, distance, res);
  38.         return res;
  39.         
  40.     }
  41. };
复制代码



参考链接:https://leetcode-cn.com/problems ... s-pairs-by-ikaruga/

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-20 03:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表