一个用数组表示的二叉树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每一位上的值就可以知道左还是右节点了。
分享到:
相关推荐
由于二叉树中每个结点都可能有两个子树,因此需要寻找一条合适的搜索路径。 1、前序遍历 前序遍历二叉树操作定义为: 若树为空,则空操作返回;否则 (1)访问根结点 (2)前序遍历根结点的左子树 (3)前序遍历根...
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到图中其它顶点的最短...
067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的...
067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的...
067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的...
067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的...
067 求解最优交通路径 068 八皇后问题 069 骑士巡游 070 用栈设置密码 071 魔王语言翻译 072 火车车厢重排 073 队列实例 074 K阶斐波那契序列 第三部分 数值计算与趣味数学篇 075 绘制余弦曲线和直线的...
最优二叉搜索树 : : 桶排序 搜索 : 字符串匹配: 与间隙字符匹配的字符串。 可能性 数学: 树: 二叉树: : 双向 BFS: , 所有对最短路径 - Johnson 网络流量 中位数和订单统计这个问题有一个线性的最坏情况运行...
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背包问题 ...
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背包问题 ...
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背包问题 ...
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背包问题 ...
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背包问题 ...
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背包问题 ...
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背包问题 ...
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背包问题 ...
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背包问题 ...
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...