二叉树中和为某一值的路径
来源:互联网 发布:linux mysql 注册服务 编辑:程序博客网 时间:2024/05/18 17:00
题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
思路:
使用变量存放当前遍历的路径和,当访问到某一结点时,把该结点添加到路径上,并累加当前结点的值。如果当前结点为叶结点并且当前路径的和刚好等于输入的整数,则当前的路径符合要求,我们把它打印出来。如果当前结点不是叶结点,则继续访问它的子结点。当前结点访问结束后,递归函数将自动回到父结点,因此我们在函数退出之前要在路径上删除当前结点并减去当前结点的值,以确保返回父结点时路径刚好是根结点到父结点的路径。
#include<iostream>#include<vector>#include<stdlib.h>using namespace std;typedef struct BiTNode{ int data; struct BiTNode* lchild; struct BiTNode* rchild;}BiTNode,*BiTree;void FindPath1(BiTNode* root,int expectedsum,int currentsum, vector<int> &path);void CreateBiTree(BiTree &root){ int ch; cin>>ch; if(ch==0) root=NULL; else { root=(BiTNode*)malloc(sizeof(BiTNode)); root->data=ch; cout<<"输入"<<ch<<"的左子树:"; CreateBiTree(root->lchild); cout<<"输入"<<ch<<"的右子树:"; CreateBiTree(root->rchild); }}void FindPath(BiTNode* root,int expectedsum){ if(root==NULL) return ; vector<int> path; int currentsum=0; FindPath1(root,expectedsum,currentsum,path);}void FindPath1(BiTNode* root,int expectedsum,int currentsum, vector<int> &path){ currentsum+=root->data; path.push_back(root->data); bool isLeaf=root->lchild==NULL&&root->rchild==NULL; if(currentsum==expectedsum && isLeaf) { cout<<"path is:"; vector<int>::iterator iter; for(iter=path.begin();iter!=path.end();iter++) cout<<*iter<<"\t"; cout<<endl; } if(root->lchild) FindPath1(root->lchild,expectedsum,currentsum,path); if(root->rchild) FindPath1(root->rchild,expectedsum,currentsum,path); path.pop_back();}int main(){ BiTNode* root=NULL; int len; CreateBiTree(root); cout<<"期待的路径长度:"; cin>>len; FindPath(root,len); return 0;}
- 【树】二叉树中和为某一值的路径
- 【树6】二叉树中和为某一值的路径
- 题目11:二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的所有路径
- 题目1368:二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- 1368:二叉树中和为某一值的路径 @jobdu
- 二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- Q25:二叉树中和为某一值的路径
- 剑指offer:二叉树中和为某一值的路径
- 二叉树中和为某一值的路径(剑指offer25)
- 项目2
- poj2546 求两个圆相交的面积
- servlet容器对url的匹配过程
- poj1160 Post Office
- oracle游标相关
- 二叉树中和为某一值的路径
- 中缀表达式转换为后缀表达式(栈的使用)
- <load-on-strartup>标签的作用
- 计数排序
- SSH无密码互信配置
- 黑马程序员_Java7.0新特性
- 理解node.js
- 后缀表达式求值
- httpurlconnection设置user-agent参数