`
phyeas
  • 浏览: 161619 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

寻找二叉树最优路径

阅读更多

 

一个用数组表示的二叉树int[] tree=new int[]{7,5,46,1,8,9,36...};,根节点为7,下面俩子节点分别是5和46,以此类推产生其他子节点。现在需要找出该二叉树所有节点之和最大的路径。

 

首先想到的是将该数组变成一个树形结构的数据再遍历该树节点值相加,得到最后结果最大的叶子节点,再回溯到根节点得到路径,但这样耗费太多空间资源。每个节点需要存储其本身的值,然后还有存储其子节点和父节点。事实上我们只是路径而已,不需要存储节点间的关系,所以,我们可以新建一个可以存放2的n次方个整数的数组用以存储路径,使用整数来存储所有的路径,因为在计算机中的数据都是使用二进制表示,010101,我们就可以利用这样的特性构造一条路径,定义1为右节点,0为左节点。例如:101即是在第一个节点右转,下一个节点左转,再下个节点右转。应用到上面的例子中就是从7开始到46,再到9...光知道可以使用这样的结果作为路径存储还不够。还要知道怎么用它。这里我使用左遍历来遍历二叉树。以上面的例子来展示就是从7到5到1再回溯到5查看5的有节点,就是8,再回溯到5就没有其他节点了,回溯到7,处理有节点的46再到46的左子节点9。这样的遍历原则可以让路径的生产规则如同数字的自增规则,一开始的时候路径的表示是000(以上面的例子做示范,假设不包括根节点共有三个层次的节点),000(0)即是所有的拐点都是左。而下一条路径刚好是回溯一个节点,即最后一个拐点指向右,即001(1),再下一个节点则是回溯两个节点,中间的指向右,最后一个拐点指向左。即010(2),路径就这样0,1,2,3...递增下去。

 

按照最顶上的例子,我们得到4个路径00,01,10,11。对应的值分别是7+5+1=13,7+5+8=20,7+46+9=62,7+46+36=89。最终放在一个存放结果的数组里(实际上只需要一个存储结果的数组就可以了,路径是递增的,即是数组元素的下标)。new int[]{13,20,62,89}。最大的路径就是11(3)。

 

在检查路径时需要知道树的层次有多深,再用位移去逐个check每一位上的值就可以知道左还是右节点了。

0
2
分享到:
评论

相关推荐

    第五章 树与二叉树

    由于二叉树中每个结点都可能有两个子树,因此需要寻找一条合适的搜索路径。 1、前序遍历 前序遍历二叉树操作定义为: 若树为空,则空操作返回;否则 (1)访问根结点 (2)前序遍历根结点的左子树 (3)前序遍历根...

    数据结构、算法与应用:C++语言描述(原书第2版)第二部分

    16.9.1 寻找一条路径 16.9.2 连通图及其构成 16.9.3 生成树 第三部分 算法设计方法 第17章 贪婪算法 17.1 最优化问题 17.2 贪婪算法思想 17.3 应用 17.3.1 货箱装载 17.3.2 0/1背包问题 17.3.3 拓扑排序 17.3.4 二...

    算法分析与设计习题集答案

    编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小(输出应包括所去掉的数字的位置和组成的新的正整数,N不超过240位)。 21、 对于下图给出的有向网,写出用Dijkstra方法求从顶点A到图中其它顶点的最短...

    220个C语言程序源代码集合.zip

    067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的...

    220个C语言程序源代码.zip

    067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的...

    200个C程序.rar

    067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的...

    220个经典C程序源码文件,可以做为你的学习设计参考.zip

    067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的...

    200个经典C程序源码(包括基础篇+数据结构篇+数值计算与趣味数学篇+图形篇+系统篇+常见试题解答篇).zip

    067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的...

    leetcode答案-interview-preparation:面试准备

    最优二叉搜索树 : : 桶排序 搜索 : 字符串匹配: 与间隙字符匹配的字符串。 可能性 数学: 树: 二叉树: : 双向 BFS: , 所有对最短路径 - Johnson 网络流量 中位数和订单统计这个问题有一个线性的最坏情况运行...

    C++语言描述(PDF合集)

    12.11.1 寻找路径 399 12.11.2 连通图及其构件 400 12.11.3 生成树 402 第三部分 算法设计方法 第13章 贪婪算法 405 13.1 最优化问题 405 13.2 算法思想 406 13.3 应用 409 13.3.1 货箱装船 409 13.3.2 0/1背包问题 ...

    数据结构算法与应用(C++语言描述).rar

    12.11.1 寻找路径 399 12.11.2 连通图及其构件 400 12.11.3 生成树 402 第三部分 算法设计方法 第13章 贪婪算法 405 13.1 最优化问题 405 13.2 算法思想 406 13.3 应用 409 13.3.1 货箱装船 409 13.3.2 0/1背包问题 ...

    数据结构C++描述

    12.11.1 寻找路径 399 12.11.2 连通图及其构件 400 12.11.3 生成树 402 第三部分 算法设计方法 第13章 贪婪算法 405 13.1 最优化问题 405 13.2 算法思想 406 13.3 应用 409 13.3.1 货箱装船 409 13.3.2 0/1背包问题 ...

    数据结构 C++描述

    12.11.1 寻找路径 399 12.11.2 连通图及其构件 400 12.11.3 生成树 402 第三部分 算法设计方法 第13章 贪婪算法 405 13.1 最优化问题 405 13.2 算法思想 406 13.3 应用 409 13.3.1 货箱装船 409 13.3.2 0/1背包问题 ...

    数据结构算法与应用-C__语言描述

    12.11.1 寻找路径 399 12.11.2 连通图及其构件 400 12.11.3 生成树 402 第三部分 算法设计方法 第13章 贪婪算法 405 13.1 最优化问题 405 13.2 算法思想 406 13.3 应用 409 13.3.1 货箱装船 409 13.3.2 0/1背包问题 ...

    数据结构算法与应用-C++语言描述

    12.11.1 寻找路径 399 12.11.2 连通图及其构件 400 12.11.3 生成树 402 第三部分 算法设计方法 第13章 贪婪算法 405 13.1 最优化问题 405 13.2 算法思想 406 13.3 应用 409 13.3.1 货箱装船 409 13.3.2 0/1背包问题 ...

    数据结构、算法与应用--C++语言描述

    12.11.1 寻找路径 399 12.11.2 连通图及其构件 400 12.11.3 生成树 402 第三部分 算法设计方法 第13章 贪婪算法 405 13.1 最优化问题 405 13.2 算法思想 406 13.3 应用 409 13.3.1 货箱装船 409 13.3.2 0/1背包问题 ...

    数据结构(C语言描述)

    12.11.1 寻找路径 399 12.11.2 连通图及其构件 400 12.11.3 生成树 402 第三部分 算法设计方法 第13章 贪婪算法 405 13.1 最优化问题 405 13.2 算法思想 406 13.3 应用 409 13.3.1 货箱装船 409 13.3.2 0/1背包问题 ...

    数据结构算法与应用-C C++语言描述

    12.11.1 寻找路径 399 12.11.2 连通图及其构件 400 12.11.3 生成树 402 第三部分 算法设计方法 第13章 贪婪算法 405 13.1 最优化问题 405 13.2 算法思想 406 13.3 应用 409 13.3.1 货箱装船 409 13.3.2 0/1背包问题 ...

    数据结构算法与应用-C++语言描述.rar

    12.11.1 寻找路径 399 12.11.2 连通图及其构件 400 12.11.3 生成树 402 第三部分 算法设计方法 第13章 贪婪算法 405 13.1 最优化问题 405 13.2 算法思想 406 13.3 应用 409 13.3.1 货箱装船 409 13.3.2 0/1...

Global site tag (gtag.js) - Google Analytics