#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 8
typedef struct node
{
int data;
struct node * left;
struct node * right;
}BTree;
typedef struct
{
int top;
int data[MAXSIZE];
}Stack;
BTree * CreatTree(int a[],int n);
void Iorder(BTree * root);
void Porder(BTree * root);
void FindPath(BTree * root,int sum,int target,Stack * stack);
void InitStack(Stack * stack);
void Push(Stack * s,int val);
int Pop(Stack *s);
int main(void)
{
int array[MAXSIZE] = {5,3,8,7,2,4,1,9},target;
BTree * root;
Stack stack;
target = 12;
root = CreatTree(array,MAXSIZE);
InitStack(&stack);
printf("二叉树内元素升序排列:");
Iorder(root);
printf("\n");
printf("目标值:%d,路径:",target);
FindPath(root,0,target,&stack);
printf("\n");
return 0;
}
//根据数组生成二叉排序树
BTree * CreatTree(int a[],int n)
{
BTree * root ,*p,*cu,*pa;
int i;
root = (BTree *)malloc(sizeof(BTree));
root->data = a[0];
root->left = root->right =NULL;
for(i=1;i<n;i++)
{
p = (BTree *)malloc(sizeof(BTree));
p->data = a[i];
p->left = p->right =NULL;
cu = root;
while(cu)
{
pa = cu;
if(cu->data > p->data)
cu = cu->left;
else
cu = cu->right;
}
if(pa->data > p->data)
pa->left = p;
else
pa->right = p;
}
return root;
}
//中根遍历,打印二叉树
void Iorder(BTree * root)
{
if(root)
{
Iorder(root->left);
printf("%3d",root->data);
Iorder(root->right);
}
}
//寻找路径
void FindPath(BTree * root,int sum,int target,Stack * s)
{
int i;
if(!root)
return ;
if(sum + root->data == target)
{
Push(s,root->data);
for(i = 0;i<s->top;i++)
printf("%3d",s->data[i]);
return;
}
else if(sum + root->data > target)
{
return;
}
else
{
Push(s,root->data);
sum += root->data;
FindPath(root->left,sum,target,s);
FindPath(root->right,sum,target,s);
sum -= root->data;
Pop(s);
}
}
//初始化栈
void InitStack(Stack * s)
{
s->top = 0;
}
//入栈
void Push(Stack *s,int val)
{
if(s->top == MAXSIZE)
{
printf("栈满,无法入栈!\n");
return;
}
s->data[(s->top)++] = val;
}
//出栈
int Pop(Stack *s)
{
if(s->top == 0)
{
printf("栈空,无法出栈!\n");
return;
}
return s->data[--(s->top)];
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有