C语言实现找出二叉树中某个值的所有路径的方法_C 语言

本文实例讲述了C语言实现找出二叉树中某个值的所有路径的方法,是非常常用的一个实用算法技巧。分享给大家供大家参考。

具体实现方法如下:

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
vector<int> result;
struct Node {
 Node(int i = 0, Node *pl = NULL, Node *pr = NULL) : data(i), left(pl), right(pr) {}
 int data;
 Node *left;
 Node *right;
};
Node* Construct()
{
 Node *node4 = new Node(7);
 Node *node3 = new Node(4);
 Node *node2 = new Node(12);
 Node *node1 = new Node(5, node3, node4);
 Node *root = new Node(10, node1, node2);
 return root;
}
void print()
{
 copy(result.begin(), result.end(), ostream_iterator<int>(cout, " "));
 cout << endl;
}
void PrintSum(Node *root, int sum)
{
 if(root == NULL)
 return;
 result.push_back(root->data);
 if(root->left == NULL && root->right == NULL && root->data == sum) {
 print();
 }
 PrintSum(root->left, sum - root->data);
 PrintSum(root->right, sum - root->data);
 result.pop_back();
}
void main()
{
 Node *root = Construct();
 PrintSum(root, 22);
}

感兴趣的朋友可以测试运行一下本文实例。相信本文所述算法对大家C程序算法设计的学习有一定的借鉴价值。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c语言
, 二叉树
, 值
所有路径
二叉树 c语言、c语言创建二叉树、c语言二叉树的建立、c语言二叉树遍历、二叉树c语言实现,以便于您获取更多的相关知识。

时间: 2025-01-02 10:37:55

C语言实现找出二叉树中某个值的所有路径的方法_C 语言的相关文章

字符串中找出连续最长的数字字符串的实例代码_C 语言

复制代码 代码如下: //1. 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr) //功能: //在字符串中找出连续最长的数字串,并把这个串的长度返回, //并把这个最长数字串付给其中一个函数参数outputstr所指内存. //例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,outputstr所指的值为123456789 #include<stdio.

如何通过SQL找出2个表里值不同的列的方法_Mysql

以下有两个表,他们的结构完全相同,请通过SQL找出值不同的列. Student_1 NAME AGE SCORE peter 26 100 jack 25 96 daniel 26 48 bark 21 69     Student_2 NAME AGE SCORE peter 26 89 jack 25 96 daniel 26 48 bark 21 69   方法一 -- NOT EXISTS: 复制代码 代码如下: SELECT *FROM Student_1 S1WHERE NOT EX

MFC扩展DLL中导出类和对话框的实现方法_C 语言

本文实例讲述了MFC扩展DLL中导出类和对话框的实现方法,分享给大家供大家参考.具体实现方法如下: 一般来说,如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对话框. 程序运行结果如下图所示: 一.创建MFC扩展DLL 步骤: 运行Visual Studio 6.0->File->New...->Projects: 选择Mfc AppWiz

C++实现查找二叉树中和为某一值的所有路径的示例_C 语言

从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径. 打印出和与输入整数相等的所有路径. 例如 输入整数22和如下二元树 则打印出两条路径:10, 12和10, 5, 7. 先序遍历树即可得到结果. 算法: FindPath(BTree * root,int sum,int target,Stack * s) 用来计算,sum为栈中的元素的和,target为目标值. 到达一个节点之后计算当前节点和sum的和,如果为target,输出路径返回,如果大于target,则直接返回,如果小

linux c程序中获取shell脚本输出的实现方法_C 语言

1. 前言Unix界有一句名言:"一行shell脚本胜过万行C程序",虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作.比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令.但是,system函数仅返回命令是否执行成功,而我们可能需要获得shell命令在控制台上输出的结果.例如,执行外部命令ping后,如果执行失败,我们希望得到p

浅析C++中boost.variant的几种访问方法_C 语言

Boost.Variant Variant库包含一个不同于union的泛型类,用于在存储和操作来自于不同类型的对象.这个库的一个特点是支持类型安全的访问,减少了不同数据类型的类型转换代码的共同问题. Variant 库如何改进你的程序?      •对用户指定的多种类型的进行类型安全的存储和取回      •在标准库容器中存储不同类型的方法      •变量访问的编译期检查      •高效的.基于栈的变量存储 Variant 库关注的是对一组限定类型的类型安全存储及取回,即非无类的联合.Boo

求数组中最长递增子序列的解决方法_C 语言

存储扩展算法n2编程c 写一个时间复杂度尽可能低的程序,求一个一维数组(N个元素)中的最长递增子序列的长度.例如:在序列1,-1,2,-3,4,-5,6,-7中,其最长的递增子序列为1,2,4,6 或者 -1,2,4,6.(编程之美P198-202)分析与解法根据题目的要求,求一维数组中的最长递增子序列,也就是找一个标号的序列b[0],b[1],-,b[m](0 <= b[0] < b[1] < - < b[m] < N),使得array[b[0]]<array[b[1

在C语言编程中设置和获取代码组数的方法_C 语言

C语言setgroups()函数:设置组代码函数头文件: #include <grp.h> 定义函数: int setgroups(size_t size, const gid_t * list); 函数说明:setgroups()用来将list 数组中所标明的组加入到目前进程的组设置中. 参数size 为list()的gid_t 数目, 最大值为NGROUP(32). 返回值:设置成功则返回0, 如有错误则返回-1. 错误代码: EFAULT:参数list 数组地址不合法. EPERM:权限

ubuntu中打开终端的三种解决方法_C 语言

这个不应该称得上是一个问题,但是,发现对于新手,确实是个难题因为少有人能够提到这一点,基本都是上来就直接讲用到的命令.我开始的时候也曾经被这个问题困扰着,后来,搜了一会儿才弄明白.1.在菜单内的附件上面有2.在运行命令的输入框打开3-..--------------------------------------------------------------------------------1.很好弄,在左上角的菜单上点一下,出来一列,在里面选择[附件] 中的[终端],点一下就OK.那是快捷