java二叉树求权值_百度笔试题目:二叉树路径权值和【转】
数据结构课程
百度笔试题目:
给出一个二叉树,和一个整型值,求出二叉树上所有从根到叶子的路径,并且此路径上各个节点的权值之和等于给出的整型值。
解题思路:
根据二叉树的先根遍历思想,通过一个栈保存从根到当前节点的路径,每遍历一个节点,都从sum值中减去此节点的权值,此点遍历结束后,再从栈中弹出此节点,并在sum中加上此节点的权值。当sum为零且当前节点为叶子节点时,打印栈中保存的路径。
#include
#include
#define STACK_MAX 100
int sum = 25;
typedef struct _node{
int data;
struct _node *lchild;
struct _node *rchild;
}TreeNode;
int stack[STACK_MAX + 1] =
{0};
int top = 0;
int bottom = 0;
int push(int m)
{
if (top+1 > STACK_MAX) {
printf("stack full!\n");
return 0;
} else {
printf("push %d\n",m);
stack[++top] = m;
return 1;
}
}
int pop(int *m)
{
if (top == 0) {
printf("stack empty!\n");
return 0;
} else {
*m = stack[top--];
printf("pop %d\n",*m);
return 1;
}
}
int print_stack()
{
int i;
if (top == 0) {
printf("stack empty!\n");
return 0;
} else {
i = 1;
while (i <= top) {
printf("%d ",stack[i++]);
}
printf("\n");
return 1;
}
}
void create_tree(TreeNode
**node_p,FILE *fp)
{
int m;
fscanf(fp,"%d",&m);
if (m >= 0) {
*node_p = (TreeNode *)malloc(sizeof(TreeNode));
if (!(*node_p)) {
printf("err!!");
exit(1);
}
(*node_p)->data = m;
create_tree(&((*node_p)->lchild),fp);
create_tree(&((*node_p)->rchild),fp);
} else {
*node_p = NULL;
}
}
void print_tree(TreeNode
*node_p)
{
if (node_p != NULL) {
printf("%d ", node_p->data);
print_tree(node_p->lchild);
print_tree(node_p->rchild);
}
}
void del_tree(TreeNode
*node_p)
{
if (node_p != NULL) {
del_tree(node_p->lchild);
del_tree(node_p->rchild);
free(node_p);
}
}
void check_sum(TreeNode
*node_p)
{
int m;
if (node_p != NULL) {
push(node_p->data);
sum -= node_p->data;
printf("check %d begin\n",node_p->data);
if (node_p->lchild == NULL
&& node_p->rchild ==
NULL && sum == 0) {
print_stack();
}
check_sum(node_p->lchild);
check_sum(node_p->rchild);
printf("check %d over\n",node_p->data);
pop(&m);
sum += m;
}
}
int main()
{
FILE *fp = NULL;
fp = fopen("tree_sum_input.data","r");
if (fp == NULL) {
printf("fopen err!");
return 0;
}
TreeNode *root_p = NULL;
create_tree(&root_p,fp);
print_tree(root_p);
check_sum(root_p);
del_tree(root_p);
fclose(fp);
return 0;
}
5
3
7
10
-1
-1
-1
8
-1
9
-1
-1
2
1
-1
-1
11
-1
-1
数据结构课程
http://hi.baidu.com/数据结构课程推荐文章:
1. 二叉树的建立与遍历
2. poj 2255 Tree Recovery 二叉树
3. 创建二叉树 并进行先序、中序、后序排列 求叶子节点数、总节点数和树的深度
4. 二叉树的中序、前序、后序的递归、非递归遍历算法,包含建树的实现(一)
5. 二叉树的后序遍历 pascal
6. A Binary Apple Tree 苹果二叉树
7. ds18b20二叉树搜索算法
8. 转:由二叉树的遍历还原二叉树
9. java jdk5.0 范类实现的 二叉树 对任何对象排序 BinaryTree
10. 数据结构之二叉树(C语言)实现文件
java二叉树求权值_百度笔试题目:二叉树路径权值和【转】相关推荐
- 带权路径长度wpl值_哈夫曼树带权路径长度怎么计算
哈夫曼树的带权路径长度是什么? 1.树的路径长度 树的路径长度是从树根到树中每一结点的路径长度之和.在结点数目相同的二叉树中,完全二叉树的路径长度最短. 2.树的带权路径长度(Weighted Pat ...
- java中的左值右值_快速了解C/C++的左值和右值
最近在segmentfault上看到一个提问<c++隐式的类类型转换问题>:一时不知怎么回答,查阅相关资料后整理了本文,以供参考学习. 定义 早期的C给出的定义:左值是一个表达式,可能出现 ...
- 已知空间中的三点 求三角形面积_【气宇轩昂】解三角形最值问题的四大模型尤其是第四种模型,简直不要太赞哦!!!...
点击上方蓝色字体"高中数学王晖"关注王晖老师,免费获取各种知识干货和学习经验~~~您的点赞转发是对老师的最大鼓舞~~~ 距高考还有262天 1 三角函数有界性 在三角函数中,正弦函 ...
- 秋招/春招常见笔试题目——二叉树系列(C/C++)
大家好!下面是我(一个小小的搬运工)在秋招的时候在Leetcode上整理的一些二叉树的题目(中等难度),笔试和面试考相似思路题目的概率比较大,大家如果准备春秋季招聘可以先根据这些题目复习(具体思路可以 ...
- 赛码浪潮笔试题库软件实施岗位_浪潮笔试题目
6.2 笔试题目 浪潮软件研发 B 卷( 60 分钟) 注:对于有 C 和 JAVA 选择的试题,考生可以选择其中一种解答,请在答题卡中标明.即选择 C 语言试题解答,则解答的 JAVA 试题不计分: ...
- c++编写算法判断二叉树是否为完全二叉树_[校招-算法题] 二叉树基础算法1
二叉树是面试中常考的数据结构,因为涉及大量指针操作,因此可以考察思维的严谨性和灵活性.但是校招中的二叉树题规律性很强,因此需要总结一下. 各种常见的二叉树概念 二叉树:每个结点最多有两个子树(左子树和 ...
- 二叉树-求第一条最长路径长度并输出路径
求第一条最长路径长度并输出路径 算法思想 利用递归遍历思想,先求出二叉树最长路径也就是当前树的高度 再调用求路径长度的函数判断指针走向输出路径 int LongestPath(BiTree *T){ ...
- 微信小程序如何从数组里取值_微信小程序获取各种数据值跟设置数据值
微信小程序获取各种数据值跟设置数据值. 修改设置data数组中的某个值://小程序接收后台数据若为数组时,下标最好为默认索引数组,从0开始排序 var articleId ='1'//对应数组中的索引 ...
- java编程求卡特兰数_卡特兰数(Catalan Number)
卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.该数在计算机专业中比较重要,有一些具体的应用实例.这篇文章主要分三部分: 卡特兰数递归式的含 ...
最新文章
- Python-anaconda-Spyder使用matplotlib画图无法显示报错解决:Figures now render in the Plots pane by default. To mak
- Mysql 层级、执行顺序、执行计划分析
- 改变Android ProgressBar样式颜色
- Spring boot中使用Swagger2
- Cascade R-CNN升级!目标检测制霸COCO,实例分割超越Mask R-CNN
- Traffic Manager Overview
- Excel-DNA开发包:ExcelDna-0.34.6.zip下载
- 团队-象棋游戏-代码设计规范
- Atitit office ooxml 系列 excel的读取api 框架 poi的使用
- Filezilla server 使用教程
- Android控件 TabHost,Android控件之TabHost用法实例分析
- 盘点城市智慧水务领域的英文期刊
- Linux实验四——Linux用户和用户组管理
- servlet生成验证码和点击刷新验证码
- oracle打开audit,oracle开启audit(审计)
- CSDN如何修改用户名(CSDN ID)、用户昵称以及自定义博客域名等
- 鳗鱼刺多怎么处理图像_鳗鱼小刺多怎么处理
- 区块链技术应用场景之政务链
- QQ文件和公告不显示
- 利用Lambda表达式从实体集合中筛选出符合条件的实体集合
热门文章
- 斯坦福大学博士后王鸿伟: 知识图谱辅助的个性化推荐系统
- 通俗易懂!视觉slam第二部分——salm过程简介
- leetcode力扣75. 颜色分类
- 【广告技术】如何提升定向广告效果?腾讯广告提出高质量负实例生成新方法
- socket 获取回传信息_java中使用网络通信(Socket)来传输对象
- 伺服电机回原点的原理_西门子V90伺服电机绝对值编码器回原点常用方法
- windows删文件:找不到该项目,该项目不在xx中,请确认位置,然后重试 的解决方案
- Leetcode刷题系列汇总
- CCF认证-2015-3-2 数字排序
- sklearn学习 5.降维算法PCA和SVD