题目:输入一个整数和一棵二叉树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出节点和等于输入整数的所有路径。
例如 输入整数22和如下二叉树
10
/ \
5 12
/\
4 7
则打印出两条路径:10, 12和10, 5, 7。
二叉树节点的数据结构定义为:
struct BinaryTreeNode //二叉树节点结构
{
int m_nValue;
BinaryTreeNode *m_pLeft;
BinaryTreeNode *m_pRight;
};
源码:(可以运行,但是还有些问题没搞明白……持续更新中)
#include "stdio.h"
#include "malloc.h"
struct BinaryTreeNode // a node in the binary tree
{
int m_nValue; // value of node
BinaryTreeNode *m_pLeft; // left child of node
BinaryTreeNode *m_pRight; // right child of node
};
//打印路径
void printPath(BinaryTreeNode *path);
/**
*sum为要求的整数和
*curSum为从根节点到tree父节点,路径上所有数的和
*path指向当前路径的最后一个节点,该路径有BinaryTreeNode组成双向链表
*m_pRight指向路径下一节点,m_pLeft指向上一节点
**/
void searchPath(BinaryTreeNode *tree,BinaryTreeNode *path,int curSum,int sum)
{
curSum += tree->m_nValue;
if(curSum>sum)//路径值已经大于所求和,返回
return;
//如果没有返回 说明 当前值<输入值
BinaryTreeNode *root=new BinaryTreeNode();
//BinaryTreeNode *root=(BinaryTreeNode *)malloc(sizeof(BinaryTreeNode));
// root=NULL;
root->m_nValue=tree->m_nValue;
//将当前节点的值加入到路径中
if(path==NULL)//第一次加入
path=root;
else
{
path->m_pRight=root;
root->m_pLeft=path;
path=root; //采用尾插法,标记的是尾部
}
//如果 当前值=输入值
if(curSum==sum)
{
//路径结束且和=sum,为所求
if(tree->m_pLeft==NULL&&tree->m_pRight==NULL)
{
//获得路径头节点,用于打印
while(path->m_pLeft)
path=path->m_pLeft;
printPath(path);
}
//若当前路径的和=sum,但路径还未到达叶节点,此路径不可行
//delete node;
//free(node);
//node=NULL;
return;
}
//curSum<sum,继续搜寻路径
if(tree->m_pLeft!=NULL)
searchPath(tree->m_pLeft,path,curSum,sum);
if(tree->m_pRight!=NULL)
searchPath(tree->m_pRight,path,curSum,sum);
//delete node;
// free(node);
//node=NULL;
}
void printPath(BinaryTreeNode *path)
{
while(path)
{
printf("%5d",path->m_nValue);
//cout<<path->m_nValue<<" ";
path=path->m_pRight;
}
printf("\n");
//cout<<endl;
}
int main()
{
BinaryTreeNode *root=NULL;
BinaryTreeNode node10;
node10.m_nValue=10;
BinaryTreeNode node5;
node5.m_nValue=5;
BinaryTreeNode node12;
node12.m_nValue=12;
BinaryTreeNode node4;
node4.m_nValue=4;
BinaryTreeNode node7;
node7.m_nValue=7;
node10.m_pLeft=&node5;
node10.m_pRight=&node12;
node5.m_pLeft=&node4;
node5.m_pRight=&node7;
node12.m_pLeft=node12.m_pRight=NULL;
node4.m_pLeft=node4.m_pRight=NULL;
node7.m_pLeft=node7.m_pRight=NULL;
root=&node10;
//BinaryTreeNode *path=(BinaryTreeNode *)malloc(sizeof(BinaryTreeNode));
BinaryTreeNode *path=NULL;
printf("搜寻值为22的路径有如下几条:");
searchPath(root,path,0,22);
}
分享到:
相关推荐
4.[答案V0.1版]精选微软数据结构+算法面试100题[前25题] http://download.csdn.net/source/2796735 5.[第二部分]精选微软等公司结构+算法面试100题[前41-60题]: http://download.csdn.net/source/2811703 6.[第一...
微软等公司数据结构+算法面试100题之第41-60题答案 --- 答案V0.4版 My Blog:http://blog.csdn.net/v_JULY_v 微软等100题系列,整理资源下载地址:题目系列: 1.[最新整理公布][汇总II]微软等数据结构+算法面试100...
02第三章第四章D30-p59.ram 03第五章第五章P60-P85.rar 04第六章第章第八章P85-P8113.ram 05第九章第十章p114-P137.rar 06第十章第章P138-P165.rar 07第十■章第十■章D165-P185.ram 08第十三章第十四章p186-P218....
02 第三章 第四章P30-P59 03 第五章 第五章P60-P85 04 第六章 第七章第八章P85-P8113 05 第九章 第十章P114-P137 06 第十一章 第十二章P138-P165 07 第十二章 第十二章P165-P185 08 第十三章 第十四章P186-P218 09 ...
Python基础题库100题及答案 Python基础题库100题及答案全文共16页,当前为第1页。Python基础题库100题及答案全文共16页,当前为第1页。 Python基础题库100题及答案全文共16页,当前为第1页。 Python基础题库100题及...
第1题【答案】 第1处:sum=0 第2处:pos%2==1(或pos%2!=0) 第3处:pos++(或pos=pos+1或pos+=1) 第2题【答案】 第1处:static void 第2处:(year%4==0&&year%100!...第4题【答案】 第1处:int MaxValue
CMA P1 考试模拟题及答题解析(共50套之第4套100题).pdfCMA P1 考试模拟题及答题解析(共50套之第4套100题).pdfCMA P1 考试模拟题及答题解析(共50套之第4套100题).pdfCMA P1 考试模拟题及答题解析(共50套之第4套100题)...
【孔乙己课后题】 孔乙己课后题第四题.docx
4.[第一部分]精选微软等公司数据结构+算法经典面试100 题[1-40 题] http://download.csdn.net/source/2778852 5.[第1 题-60 题汇总]微软等数据结构+算法面试100 题 http://download.csdn.net/source/2826690 更多...
Android 四大组件 选择题 选择题 1. 下面不是Android四大组件之一的( B ) A. Activity B.Intent C. Service D. ContentProvider 2. 下面关于广播叙述错误的是(A) A. 广播是Android四大组件之一 B. ...
微软等数据结构+算法面试100题最后20题第81-100题新鲜出炉 ---100题系列V0.1版完整公布 作者:July 时间:2010年12月5日 ============= 首先,非常感谢各位,对本微软面试100题系列前期工作的大力支持。 很多很多...
R语言编程基础第四章课后习题操作题
自动控制原理胡寿松第四版课后题答 自动控制原理胡寿松第四版课后题答
2021B题泰迪杯第四届.rar
四年级英语上册单元测试题 第四单元【冀教版】精选.doc
5.[最新答案V0.3版]微软等数据结构+算法面试100题[第21-40题答案] http://download.csdn.net/source/2832862 6.[答案V0.2版]精选微软数据结构+算法面试100题[前20题]--修正 http://download.csdn.net/source/2813890...
背题当然就是背前面说的南开100题啦,其实虽然号称100题,也不过10多个题型而已,这个在我提供的下载地址里已经分好类别了。把这些题型背下来就可以了;网络上有精简版以及笔者的背诵版可供参考。背诵要在理解的基础...
源代码,Accp6.0第四章课后题
电磁场与电磁波谢处方第四版 课后思考题答案
数据库系统概念(第四版)课后题答案,英文版,pdf格式,很清晰的