#define Nil 0
#include<stdio.h>
#include<stdlib.h>
#include<vector>
typedef struct BiTNode{
int data;
BiTNode* lchild;
BiTNode* rchild;
}*BiTree;
void CreateBiTree(BiTree &T){
int temp;
printf("请输入节点的值!\n");
scanf("%d",&temp);
if(temp==Nil)
T=NULL;
else{
T=(BiTNode*)malloc(sizeof(BiTNode));
if(!T){
printf("内存分配失败\n");
return;
}
T->data=temp;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void FindSumPath(const BiTree &T,int expectedSum,std::vector<int> &vector,int currentSum){
currentSum+=T->data;
vector.push_back(T->data);
bool flag=T->lchild==NULL&&T->rchild==NULL;
if(currentSum==expectedSum&&flag){
std::vector<int>::iterator iter=vector.begin();
while(iter!=vector.end()){
printf("%3d",*iter);
iter++;
}
printf("\n");
}
if(T->lchild)
FindSumPath(T->lchild,expectedSum,vector,currentSum);
if(T->rchild)
FindSumPath(T->rchild,expectedSum,vector,currentSum);
vector.pop_back();
}
void FindInPath(BiTree T,int expectedSum){
if(T==NULL){
printf("树为空\n");
return;
}
int currentSum=0;
std::vector<int> vector;
FindSumPath(T,expectedSum,vector,currentSum);
}
void main(){
int sum;
BiTree T;
CreateBiTree(T);
printf("请输入节点的和\n");
scanf("%d",&sum);
FindInPath(T,sum);
}
PathInTree
最新推荐文章于 2023-08-21 16:10:18 发布