题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
10
/ \
5 12
/ \
4 7
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
10
/ \
5 12
/ \
4 7
则打印出两条路径:10, 12和10, 5, 7。
#include <stdio.h>
#include <stdlib.h>
#define NIL -1
#define STACKSIZE 20
typedef struct BinaryTreeNode{
int m_nValue;
struct BinaryTreeNode *m_pLeft;
struct BinaryTreeNode *m_pRight;
}BinaryTreeNode,*ptrTreeNode;
typedef struct Stack{
int data[STACKSIZE];
int top;
}Stack;
void initStack(Stack &stack){
stack.top = 0;
}
void push(Stack &stack,int value){
if(stack.top>=STACKSIZE) exit(-1);
else{
stack.data[stack.top++] = value;
}
}
int pop(Stack &stack){
if(stack.top<=0) exit(-1);
else{
return stack.data[--stack.top];
}
}
int sumAll(Stack stack){
int i,sum=0;
for(i=0;i<stack.top;i++){
sum += stack.data[i];
}
return sum;
}
void printPath(Stack stack){
int i;
for(i=0;i<stack.top;i++){
printf("%d\t",stack.data[i]);
}
printf("\n");
}
ptrTreeNode createBinaryTree(ptrTreeNode T){
int value;
printf("input the value:\n");
scanf("%d",&value);
if(value == NIL)
T = NULL;
else{
T = (ptrTreeNode)malloc(sizeof(BinaryTreeNode));
if(T == NULL) {
printf("fail to malloc");
exit(EXIT_FAILURE);
}
T->m_nValue = value;
T->m_pLeft = createBinaryTree(T->m_pLeft);
T->m_pRight = createBinaryTree(T->m_pRight);
}
return T;
}
void traverse(ptrTreeNode root,Stack &stack,int num){
push(stack,root->m_nValue);
if(root->m_pLeft==NULL&&root->m_pRight==NULL){
if(sumAll(stack)==num)
printPath(stack);
}
else{
if(root->m_pLeft!=NULL) traverse(root->m_pLeft,stack,num);
if(root->m_pRight!=NULL) traverse(root->m_pRight,stack,num);
}
pop(stack);
}
main(){
int num = 22;
Stack stack;
initStack(stack);
ptrTreeNode root = createBinaryTree(root);
traverse(root,stack,num);
}