爪哇中二叉树的垂直和
如果您想练习数据结构和算法程序,可以通过 数据结构和算法面试题.
这是Java二叉树教程的第十部分。
算法:
- 遍历树 有序遍历。
- 创建一个变量级别并将其初始化为0。遍历左子级时,将级别降低1(级别–),然后遍历正确的孩子时,将级别提高1(level ++)。
- 我们需要保持 树状图 与 作为关卡 和 值作为节点数据。如果再次获得相同的键(级别),则需要将当前节点数据添加到先前存储的值中以计算总和。
例如:
树状图的条目带有(0,40),其中0是级别,40是节点数据。因此,在遍历时,如果在级别0遇到节点30,则在处理节点30之后,TreeMap的条目将为(0,70) - 迭代所有节点后填充TreeMap后,请打印结果。
递归代码将是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
//打印二叉树的垂直和 上市 静态的 虚空 printVertivalSumOfBinaryTree(树节点 startNode,树状图<整数,整数> 树NodeMap,整型 水平) { 如果(startNode==空值) { 返回; } //迭代左孩子时将级别降低1 printVertivalSumOfBinaryTree(startNode.剩下,树NodeMap,水平-1); 如果(树NodeMap.得到(水平)!=空值) { 整数 和=树NodeMap.得到(水平)+startNode.数据; //将当前节点数据添加到先前的存储值中以获得总和 树NodeMap.放(水平, 和); } 其他 { 树NodeMap.放(水平, startNode.数据); } //迭代左孩子时将级别增加1 printVertivalSumOfBinaryTree(startNode.对,树NodeMap,水平+1); } |
请在下面的图表中找到为每个二叉树节点分配的级别。
例:
让我们创建一个用于在二进制树中打印垂直和的Java程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
包 组织.Arpit.爪哇2blog.二叉树; 进口 爪哇.实用程序.地图.条目; 进口 爪哇.实用程序.树状图; 上市 类 BinaryTreeVerticalSumMain { 上市 静态的 类 树节点 { 整型 数据; 树节点 剩下; 树节点 对; 树节点(整型 数据) { 这个.数据=数据; } } //打印二叉树的垂直和 上市 静态的 虚空 printVertivalSumOfBinaryTree(树节点 startNode,树状图<整数,整数> 树NodeMap,整型 水平) { 如果(startNode==空值) { 返回; } //迭代左孩子时将级别降低1 printVertivalSumOfBinaryTree(startNode.剩下,树NodeMap,水平-1); 如果(树NodeMap.得到(水平)!=空值) { 整数 和=树NodeMap.得到(水平)+startNode.数据; //将当前节点数据添加到先前的存储值中以获得总和 树NodeMap.放(水平, 和); } 其他 { 树NodeMap.放(水平, startNode.数据); } //迭代左孩子时将级别增加1 printVertivalSumOfBinaryTree(startNode.对,树NodeMap,水平+1); } 上市 静态的 虚空 主要(串[] args) { //创建一个二叉树 树节点 根节点=createBinaryTree(); 系统.出.打印(“二叉树的垂直和为:”); 树状图<整数,整数> 树NodeMap=新 树状图<整数,整数>(); printVertivalSumOfBinaryTree(根节点, 树NodeMap, 0); 对于(条目<整数,整数> 条目:树NodeMap.条目Set()) 系统.出.打印(条目.得到Value()); } 上市 静态的 树节点 createBinaryTree() { 树节点 根节点 =新 树节点(40); 树节点 node20=新 树节点(20); 树节点 node10=新 树节点(10); 树节点 node30=新 树节点(30); 树节点 node60=新 树节点(60); 树节点 node50=新 树节点(50); 树节点 node70=新 树节点(70); 树节点 node55=新 树节点(55); 树节点 node5=新 树节点(5); 根节点.剩下=node20; 根节点.对=node60; node20.剩下=node10; node20.对=node30; node60.剩下=node50; node60.对=node70; node50.对=node55; node30.剩下=node5; 返回 根节点; } } |
运行上面的程序,您将获得以下输出:
1 2 3 4 5 6 7 8 |
垂直 和 的 二元 树 将 是: 10 25 120 115 70 |