输出二叉树路径上的所有和为K的路径
来源:互联网 发布:衣柜 知乎 编辑:程序博客网 时间:2024/04/30 17:55
太坑爹了
1、可能有负值
2、左右子树的大小不保证左边<右边
#include<stdio.h>#include<stdlib.h>#include<vector>using namespace std;int n,k;struct Node{ int v,id; Node *left,*right; Node():left(NULL),right(NULL){}};Node* nd[10005];vector<int> vec;void print(vector<int> v){printf("A path is found: "); for(int i=0;i<v.size();i++){if(i!=v.size()-1) printf("%d ",v[i]); else printf("%d",v[i]);}printf("\n");}int res;void find_path(Node* root,int k){ if(root==NULL) return; res+=root->v; vec.push_back(root->id); if(res==k&&root->left==NULL&&root->right==NULL){ print(vec); //return;这儿不能直接return,要减去之后才能return}//if(res>k) return;if(root->left!=NULL) find_path(root->left,k);if(root->right!=NULL)find_path(root->right,k);res-=root->v;vec.pop_back();}int main(){while(scanf("%d%d",&n,&k)!=EOF){printf("result:\n");for(int i=1;i<=n;i++) nd[i]=new Node; int v,l,r;for(int i=1;i<=n;i++){ scanf("%d%d%d",&v,&l,&r); //这是太奇怪了,由于要求字典序,因此这里需要交换 if(l>0) nd[i]->left=nd[l]; if(r>0) nd[i]->right=nd[r]; if(l>r){ Node* tmp=nd[i]->left; nd[i]->left=nd[i]->right; nd[i]->right=tmp;}nd[i]->v=v;nd[i]->id=i;}res=0;vec.clear();find_path(nd[1],k);for(int i=1;i<=n;i++) delete nd[i];}//system("pause"); return 0;}
- 输出二叉树路径上的所有和为K的路径
- 输出二叉树和为特定整数的所有路径
- 【31】给定一个二叉树打印出所有从根结点到叶子结点路径和为 k 的路径
- 【31】给定一个二叉树打印出所有从根结点到叶子结点路径和为 k 的路径
- 剑指offer:输出二叉树和为某一值的所有路径
- 输出所有二叉树的路径
- 二叉树的路径和为给定数值的所有路径
- 找出二叉树中和为k的所有路径 Path Sum II
- 二叉树中路径和为某整数的所有路径
- 打印二叉树中路径和为某一值的所有路径
- 二叉树中路径和为某整数的所有路径 lint code by python
- 二叉树和为某种所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 二叉树的所有路径
- 10967 - The Great Escape
- 快速排序 算法 详解 及 深度优化
- Linux中常见的文件操作命令
- JSP简介
- ubuntu/wireshark: There are no interfaces on which a capture can be done.故障解决
- 输出二叉树路径上的所有和为K的路径
- 以标准体重计算器为例演示
- 代码走查工具篇FxCop的规则总结与翻译_Part2
- ubuntu/wireshark --Lua: Error during loading: [string "/usr/share/wireshark/init.lua"]:45问题解决
- UVA 11437 Triangle Fun
- Vs2012+Opencv 2.4.4 +windows 7
- win7下安装xp
- 不使用中间变量实现两个变量的交换
- 搞ACM的你伤不起(挺好玩的。嘿)