二叉树中和为某一值的路径
来源:互联网 发布:广州软件培训学校 编辑:程序博客网 时间:2024/05/16 23:50
- 题目描述:
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
- 输入:
每个测试案例包括n+1行:
第一行为2个整数n,k(1<=n<=10000),n表示结点的个数,k表示要求的路径和,结点编号从1到n。
接下来有n行。这n行中每行为3个整数vi,leftnode,rightnode,vi表示第i个结点的值,leftnode表示第i个结点的左孩子结点编号,rightnode表示第i个结点的右孩子结点编号,若无结点值为-1。编号为1的结点为根结点。
- 输出:
对应每个测试案例,先输出“result:”占一行,接下来按字典顺序输出满足条件的所有路径,这些路径由结点编号组成,输出格式参照输出样例。
- 样例输入:
5 22
10 2 3
5 4 5
12 -1 -1
4 -1 -1
7 -1 -1
1 5
1 -1 -1
- 样例输出:
result:
A path is found: 1 2 5
A path is found: 1 3
result:
#include<stdio.h>#include<stdlib.h>#define MAX 1000struct BinaryTreeNode{int m_nValue;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;};int top=-1;int path[MAX];//用数组模拟辅助栈 //pop 使得top-- bool pop(){if(top<0)return false;top--;return true;}void findPath(BinaryTreeNode* pRoot,int expectSum,int currentSum){if(pRoot==NULL)return;currentSum+=pRoot->m_nValue;path[++top]=pRoot->m_nValue;bool isLeaf =pRoot->m_pLeft==NULL&&pRoot->m_pRight==NULL;if(currentSum==expectSum&&isLeaf){printf("A path is found:");for(int i=0;i<=top;i++)printf("%d\t",path[i]);printf("\n");} if(pRoot->m_pLeft!=NULL)findPath(pRoot->m_pLeft,expectSum,currentSum);if(pRoot->m_pRight!=NULL)findPath(pRoot->m_pRight,expectSum,currentSum);currentSum-=pRoot->m_nValue;pop();}BinaryTreeNode* createTree(BinaryTreeNode* pRoot){int data;scanf("%d",&data);if(data!=-1){pRoot=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));if(pRoot==NULL)exit(0);pRoot->m_nValue=data;//递归左子树和右子树 pRoot->m_pLeft=createTree(pRoot->m_pLeft); pRoot->m_pRight=createTree(pRoot->m_pRight);return pRoot;}return NULL;}int main(){BinaryTreeNode* pTree;BinaryTreeNode* pRoot = createTree(pTree);int expectSum;int currentSum=0;scanf("%d",&expectSum);findPath(pRoot,expectSum,currentSum);return 0;}
结果:
0 0
- 【树】二叉树中和为某一值的路径
- 【树6】二叉树中和为某一值的路径
- 题目11:二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的所有路径
- 题目1368:二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 1368:二叉树中和为某一值的路径 @jobdu
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- Q25:二叉树中和为某一值的路径
- 剑指offer:二叉树中和为某一值的路径
- 二叉树中和为某一值的路径(剑指offer25)
- 未能正确加载包"Microsoft.Data.Entity.Design.Package.MicrosoftDataEntityDesignPackage
- Android高效加载大图、多图解决方案,有效避免程序OOM
- LeetCode | Longest Valid Parentheses(最长有效的括号匹配)
- poj1741 树上点分治
- 二分图的最大权匹配(最小权匹配)KM算法
- 二叉树中和为某一值的路径
- Android照片墙应用实现,再多的图片也不怕崩溃
- 一些易错的题目及扩充问题(书没看完,陆续更新)
- HDU 1875 畅通工程再续 (最小生成树 水)
- Android:GestureDetector手势识别类
- Excel导入SQL SERVER,数字和字符会被系统自动置为NULL的解决方法
- __cyg_profile_func_enter print function nam
- zoj2977Strange Billboard (状态压缩+枚举)
- Python3基础(五) 函数