题目1368:二叉树中和为某一值的路径
来源:互联网 发布:yum wireshark 编辑:程序博客网 时间:2024/05/16 11:08
记录树中的编号,递归寻找路径直到叶子节点就行了
如果还没到叶子节点和就大于K就不用再递归了,减枝
注意要字典序输出,如果right大于left就会导致递归得不到字典序,交换左右
#include<cstdio>#include<cstring> #include<queue>using namespace std;typedef struct node{int val;int index;struct node *left,*right;void setVal(int v){this->val = v;left = right = NULL;}}Tree;void createTree(int n,Tree tree[]){for(int i=0;i<n;++i){int val,l,r;scanf("%d%d%d",&val,&l,&r);if(r < l){r ^= l;l ^= r;r ^= l;}tree[i].setVal(val);tree[i].index = i+1;if(l != -1){tree[i].left = &tree[l-1];}if(r != -1){tree[i].right = &tree[r-1];} }}int a[11111];void printRoad(Tree *tree,int k,int m,int index){m += tree->val;if(tree->left == NULL && tree->right == NULL && m == k){printf("A path is found: ");for(int i=0;i<index;++i)printf("%d ",a[i]);printf("%d\n",tree->index);} if(tree->left != NULL && m < k){//printf("---%d\n",m);a[index] = tree->index;printRoad(tree->left,k,m,index+1);} if(tree->right != NULL && m < k){a[index] = tree->index;printRoad(tree->right,k,m,index+1);}}int main(){int n,k;while(scanf("%d%d",&n,&k) != EOF){Tree tree[11111];createTree(n,tree); printf("result:\n");printRoad(tree,k,0,0);}return 0;}
0 0
- 题目1368:二叉树中和为某一值的路径
- 题目1368:二叉树中和为某一值的路径
- 题目1368:二叉树中和为某一值的路径
- 题目1368:二叉树中和为某一值的路径
- 题目1368:二叉树中和为某一值的路径
- 题目11:二叉树中和为某一值的路径
- 算法题目---二叉树中和为某一值的路径
- 题目1368:二叉树中和为某一值的路径-九度
- 九度 题目1368:二叉树中和为某一值的路径
- 九度 题目1368:二叉树中和为某一值的路径
- 九度OJ-题目1368:二叉树中和为某一值的路径
- 剑指Offer题目1368:二叉树中和为某一值的路径
- 1368:二叉树中和为某一值的路径 @jobdu
- JD 1368:二叉树中和为某一值的路径
- 【剑指Offer面试编程题】题目1368:二叉树中和为某一值的路径--九度OJ
- 【树】二叉树中和为某一值的路径
- 【树6】二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- Boost线程库学习笔记
- handler全面理解+源码分析
- CPP基础2
- 栈的应用:括号匹配
- Linux Kenrel Network maillist and git
- 题目1368:二叉树中和为某一值的路径
- WARNING in kthread_bind
- csdn挑战赛 学习技能 枚举+二分
- 借shared_ptr实现copy on write 以减少锁的使用
- 【iOS】使用UITableView实现树视图
- 堆排序以及优先队列
- C/C++面试题
- 兼职团队开发时遇到的一些问题及对策
- 【spring】中的事务管理AOP配置.