微软面试 第四题 路径和问题
来源:互联网 发布:淘宝买家头像图片大全 编辑:程序博客网 时间:2024/05/17 09:12
题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如输入整数22 和如下二元树
10
/ \
5 12
/ \
4 7
则打印出两条路径:10, 12 和10, 5, 7。
很简单的一个问题,可以在后序遍历二叉树的时候,进行判断,这里借助了一个辅助的数据结构,堆栈来存储之前遍历的节点。
代码如下
#include <stdio.h>
#include <malloc.h>
typedef struct treenode
{
int data;
struct treenode *lchild;
struct treenode *rchild;
}*Tree;
int array[100];
int start=0;
int end=0;
Tree createTree(int array[],int length)
{
Tree nodes[100];
int i=0;
for(i=0;i<length;i++)
{
if(array[i]!=-1)
{
nodes[i]=(Tree )malloc(sizeof(struct treenode));
nodes[i]->data=array[i];
nodes[i]->lchild=NULL;
nodes[i]->rchild=NULL;
int j=(i-1)/2;
if(i>0&&i%2==1)
{
nodes[j]->lchild=nodes[i];
}
else if(i>0&&i%2==0)
{
nodes[j]->rchild=nodes[i];
}
}
else
{
nodes[i]=NULL;
}
}
return nodes[0];
}
int postTravel(Tree tree,int sum,int def)
{
if(tree!=NULL)
{
sum=sum+tree->data;
array[end]=tree->data;
end++;
postTravel(tree->lchild,sum,def);
postTravel(tree->rchild,sum,def);
if(sum==def)
{
for(start=0;start<end;start++)
printf("%d ",array[start]);
printf("\n");
end--;
sum=sum-tree->data;
}
else
{
end--;
sum=sum-tree->data;
}
}
}
int main()
{
int i=0;
Tree tree;
int array[100];
int sum=0;
int def;
printf("please input the data,-1 represents null,ends with '#'\n");
while(scanf("%d",&array[i])==1)
{
i++;
}
printf("please input the sum\n");
getchar();
scanf("%d",&def);
printf("the result is below\n");
tree=createTree(array,i);
postTravel(tree,sum,def);
}
- 微软面试 第四题 路径和问题
- 括号问题 【微软面试100题 第四十六题】
- 二元树中找出何为某一值的所有路径 【微软面试100题 第四题】
- 微软等数据结构与算法面试100题 第四题
- 合并链表 【微软面试100题 第四十二题】
- 矩阵运算 【微软面试100题 第四十五题】
- 微软面试百题004——指定BST路径和
- 递归-微软面试100题-台阶问题
- 微软面试问题
- 微软2017 第四题
- 微软面试100题-4.在二元树中找出和为某一值的所有路径
- 微软面试100题系列---在二叉树中找出和为某一定值的所有路径
- 微软经典面试测试题和参考答案
- 一道看上去很吓人的算法题 【微软面试去100题 第四十九题】
- 二叉搜索树的非递归前中后序遍历 【微软面试100题 第四十三题】
- 设计一个魔方(六面)的程序 【微软面试100题 第四十四题】
- 最长递减子序列 【微软面试100题 第四十七题】
- 微软面试中的怪问题
- Java中,for语句块范围
- OpenJDK类加载实现浅析#1:整体流程
- java---网络请求
- 几幅让人深思的图片
- Java中四种引用
- 微软面试 第四题 路径和问题
- Java Beans
- ajax post请求request.getParameter("")取值为null
- 如何设置Tomcat的JVM虚拟机内存大
- 类与对象
- Javascript秘密花园
- 第三周项目2 三角形类2
- 第四周项目三 对象数组操作长方体类
- 网站