0

0

具有最多M个连续节点且值为K的从根到叶子的路径数量

WBOY

WBOY

发布时间:2023-08-25 22:45:13

|

1161人浏览过

|

来源于tutorialspoint

转载

简介

二叉树是一种令人着迷的数据结构,在计算机科学和编程中有着广泛的应用。一个有趣的问题是从给定的由父节点及其子节点组成的树中查找计数。二叉树由节点组成,根节点确定,根节点可以根据用户需要给出子节点。 K值决定,移动方式由M值选择。

根到叶路径的计数

该图是使用各种节点创建的,这些节点保存整数形式的值。本文主要关注从起始节点或根节点到叶子节点或子节点的计数。

示例

该图是从具有各种节点的二叉树创建的。

具有最多m个连续节点且值为k的从根到叶子的路径数量

知了追踪
知了追踪

AI智能信息助手,智能追踪你的兴趣资讯

下载
  • 在上面的二叉树中,根节点选择为“8”。

  • 然后创建两个节点,一个值为 3,另一个值为 10,占据根节点的左右位置。

  • 以值为 2 的节点作为根,创建另一个子节点,其值分别为 2 和 1 作为左节点和右节点。

  • 最后,值为 1 的子节点创建值为 -4 的子节点。

方法 1:使用递归函数计算由最多 M 个具有 K 值的连续节点组成的根到叶路径的 C++ 代码

为了有效地解决这个问题,我们将利用树遍历算法和递归等基本概念。

算法

第 1 步:创建一个用于表示树节点的结构,其中包括两个指针(左子节点和右子节点)以及用于存储节点值的整数字段。

第 2 步:设计一个递归函数,从根开始遍历二叉树,同时跟踪当前路径长度(初始化为 0)、连续出现次数(初始设置为 0)、目标值 K,允许的最大连续出现次数 M。

第 3 步:在每个左子树和右子树上递归调用该函数,并传递更新的参数,例如递增的路径长度和连续出现次数(如果适用)。

第4步:对于遍历过程中每个访问过的非空节点:

a) 如果其值等于 K,则将两个变量都加一。

b) 如果其值与 K 不匹配或超过迄今为止在路径中已遇到的 M 连续出现次数,则将变量重置为零。

第5步:在遍历树时,如果子节点在左和右两种情况下的值都为零 - 我们可以用两种方式处理,即

a) 检查变量是否不超过M。

b) 如果是,则将满足条件的路径总数增加 1。

示例

//including the all in one header
#include
using namespace std;
//creating structure with two pointers as up and down
struct Vertex {
   int data;
   struct Vertex* up;
   struct Vertex* down;
};
//countPaths function declared with five arguments ; with root = end; Node= vertex; left = up; right = down
int countPaths(Vertex* end, int K, int M, int currCount, int 
consCount) {
//To check the condition when the root is equal to 1 and greater than the maximum value, the values is incremented
   if (end == NULL || consCount > M) {
      return 0;
   }
//To check when the root is equal to the K value, increment by 1
   if (end->data == K) {
      currCount++;
      consCount++;
   } else {
//If it is not equal, it will return 0
      currCount = 0;
   }
   if (end->up == NULL && end->down == NULL) {
      if (currCount <= M) {
         return 1;
      } else {
         return 0;
      }
   }
   return countPaths(end->up, K, M, currCount, consCount) + countPaths(end->down, K, M, currCount, consCount);
}
//Main function to test the implementation
int main() {
   Vertex* end = new Vertex();
   end->data = 8;
   end->up = new Vertex();
   end->up->data = 3;
   end->down = new Vertex();
   end->down->data = 10;
   end->up->up = new Vertex();
   end->up->up->data = 2;
   end->up->down = new Vertex();
   end->up->down->data = 1;
   end->up->down->up = new Vertex();
   end->up->down->up->data = -4;

   int K = 1; // Value of node
   int M = 2; // Maximum consecutive nodes
   int currCount = -1; // Current count
   int consCount = -1; // Consecutive count

   cout << "The number of paths obtained from the given graph of" << M << "nodes with a value of " << K << " is " << countPaths(end, K, M, currCount, consCount) << endl;

   return 0;
} 

输出

The number of paths obtained from the given graph of 2 nodes with a value of 1 is 3

结论

在本文中,我们探讨了计算从顶部(即叶)到末端或根的路径数的问题。通过使用 C++ 中的树遍历算法和递归技术,可以有效地解决此类问题。遍历二叉树的过程看起来很困难,但通过示例就变得简单了。

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

42

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

4

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

3

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MongoDB 教程
MongoDB 教程

共17课时 | 1.7万人学习

微信小程序开发之API篇
微信小程序开发之API篇

共15课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号