您的位置:首页 > 职场人生

微软面试100题之第4题

2014-05-07 21:51 120 查看
题目:输入一个整数和一棵二元树。

从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。

打印出和与输入整数相等的所有路径。

例如 输入整数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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: