4 题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
10
/ /
5 12
/ \
4 7
则打印出两条路径:10, 12和10, 5, 7。
#include <iostream>
using namespace std;
struct BSTreeNode {
int value;
BSTreeNode * left;
BSTreeNode * right;
};
struct Stack {
int data[100];
int top;
};
void addNode(BSTreeNode * & root ,int value) {
if(root==NULL) {
BSTreeNode * p = new BSTreeNode;
p->value = value;
p->right = NULL;
p->left = NULL;
root = p;
}
if(value > root->value) {
addNode(root->right,value);
}
if(value< root->value) {
addNode(root->left,value);
}
}
void allPath(BSTreeNode * root ,int n,Stack ss) {
int m;
m = n-(root->value);
ss.data[ss.top] = root->value;
ss.top++;
if((n==root->value) && (root->left==NULL) && (root->right==NULL)){
cout<<root->value<<endl;
for(int j=0;j<ss.top;j++) {
cout<<ss.data[j]<<" ";
}
cout<<endl;
}
else {
Stack s;
s.top = ss.top;
for(int i=0; i<ss.top;i++) {
s.data[i] = ss.data[i];
}
if(root->left != NULL) {
allPath(root->left,m,s);
}
if(root->right != NULL) {
allPath(root->right,m,s);
}
}
}
int main() {
BSTreeNode * root = NULL;
Stack ss;
ss.top = 0;
addNode(root,10);
addNode(root,6);
addNode(root,11);
addNode(root,12);
addNode(root,4);
addNode(root,9);
addNode(root,8);
allPath(root,33,ss);
}