算法
BiTree a[100];
int s=0;
void pos_traverse(BiTree T,int data){
BiTree temp = new BiNode;
a[s]=T;
int sum=0;
sum+=T->data;
while(s!=-1){
if(a[s]->lchild&&a[s]->lchild!=temp&&a[s]->rchild!=temp){
a[s+1]=a[s]->lchild;
sum+=a[s]->lchild->data;
s++;
}
else if(a[s]->rchild&&temp!=a[s]->rchild){
a[s+1]=a[s]->rchild;
sum+=a[s]->rchild->data;
s++;
}
else{
temp=a[s];
if(temp->lchild==NULL&&temp->rchild==NULL){
if(data==sum){
for(int i=0;i<=s;i++){
cout<<a[i]->data<<" ";
}
}
}
sum-=temp->data;
s--;
}
}
return;
}
测试
#include<iostream>
using namespace std;
#define ElemType int
typedef struct BiNode {
ElemType data;
struct BiNode *lchild, *rchild;
}BiNode, *BiTree;
int BST_Insert(BiTree &t, ElemType k);
void Creat_BST(BiTree &t, ElemType str[], int n);
void Traverse(BiNode *p);
void pos_traverse(BiTree T,int data);
int main() {
int str[] = { 53,17,9,45,23,81,65,94,88 };
BiTree t;
Creat_BST(t, str, 9);
pos_traverse(t,199);
return 0;
}
BiTree a[100];
int s=0;
void pos_traverse(BiTree T,int data){
BiTree temp = new BiNode;
a[s]=T;
int sum=0;
sum+=T->data;
while(s!=-1){
if(a[s]->lchild&&a[s]->lchild!=temp&&a[s]->rchild!=temp){
a[s+1]=a[s]->lchild;
sum+=a[s]->lchild->data;
s++;
}
else if(a[s]->rchild&&temp!=a[s]->rchild){
a[s+1]=a[s]->rchild;
sum+=a[s]->rchild->data;
s++;
}
else{
temp=a[s];
if(temp->lchild==NULL&&temp->rchild==NULL){
if(data==sum){
for(int i=0;i<=s;i++){
cout<<a[i]->data<<" ";
}
}
}
sum-=temp->data;
s--;
}
}
return;
}
//二叉排序树插入新结点
int BST_Insert(BiTree &t, ElemType k) {
if (t == NULL) {
t = new BiNode;
t->data = k;
t->lchild = t->rchild = NULL;
return 1;
}
else if (k == t->data) return 0;
else if (k < t->data) return BST_Insert(t->lchild, k);
else return BST_Insert(t->rchild, k);
}
//创建排序二叉树
void Creat_BST(BiTree &t, ElemType str[], int n) {
t = NULL;
for (int i = 0; i < n; i++) {
BST_Insert(t, str[i]);
}
}
void Traverse(BiNode *p) {
if (p == NULL) {
return;
}
else {
Traverse(p->lchild);
cout << p->data <<endl;
Traverse(p->rchild);
}
return;
}