微软面试100题之第4题
2014-05-07 21:51
120 查看
题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
10
/ \
5 12
/ \
4 7
则打印出两条路径:10, 12和10, 5, 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); }
相关文章推荐
- 微软等公司数据结构+算法面试100题首次完整亮相
- 微软面试100题2010年版全部答案集锦(含下载地址)
- 微软等公司数据结构+算法面试100题
- 微软面试100题---寻找和为定值的多个数
- 全新整理:微软、谷歌、百度等公司经典面试100题[第101-160题]
- 全新整理:微软、谷歌、百度等公司经典面试100题[第1-60题]
- 微软等数据结构+算法面试100题(4)--怎样从顶部开始逐层打印二叉树结点数据?请编程
- 微软等数据结构+算法面试100题(12)--快速排序
- 微软等数据结构+算法面试100题(40)-- 旋转数组中的最小元素
- 微软面试100题
- 横空出世,席卷互联网--评微软等公司数据结构+算法面试100题
- 微软面试100题之第3题
- 微软等公司数据结构+算法面试100题--链表
- 微软面试100题
- 微软面试100题之第五题
- 二叉搜索树与双向链表 【微软面试100题 第一题】
- 第八题各小题汇总 【微软面试100题 第八题】
- 交换元素,使两数组之和的差最小 【微软面试100题 第三十二题】
- 计算圆形是否和正方形相交 【微软面试100题 第二十三题】
- [整理I]精选微软等公司数据结构+算法面试100题 [第1-40题]