Java 如何找到存储在二叉整数树中的值之和,该二叉整数树根据每个值的深度进行加权?
说明:对于给定的二叉树Java 如何找到存储在二叉整数树中的值之和,该二叉整数树根据每个值的深度进行加权?,java,algorithm,data-structures,binary-tree,binary-search-tree,Java,Algorithm,Data Structures,Binary Tree,Binary Search Tree,说明:对于给定的二叉树 +---+ | 9 | +---+ / \ +---+ +---+ | 7 | | 6 | +---+ +---+ / \ \ +---+ +---+ +---+ | 3 | | 2 | |
+---+
| 9 |
+---+
/ \
+---+ +---+
| 7 | | 6 |
+---+ +---+
/ \ \
+---+ +---+ +---+
| 3 | | 2 | | 4 |
+---+ +---+ +---+
/ \
+---+ +---+
| 5 | | 2 |
+---+ +---+
总额将计算为:
1*9+2*(7+6)+3*(3+2+4)+4*(5+2)=90
我解决这个问题的方法是找到每个节点的级别,将其与节点的键相乘,然后对左、右子树中的所有节点递归执行
int weightedSumAtAllLevels(BTNode node) {
if (node != null)
return levelSumOfLeftSubTree(node.getLeftChild())
+ levelSumOfRightSubTree(node.getRightChild())
+ node.getKey();
else
return 0;
}
int levelSumOfLeftSubTree(BTNode tmp) {
if (tmp == null) {
return 0;
} else {
int level = levelOfNode(tmp);
return level * tmp.getKey()
+ levelSumOfLeftSubTree(tmp.getLeftChild());
}
}
int levelSumOfRightSubTree(BTNode tmp) {
if (tmp == null) {
return 0;
} else {
int level = levelOfNode(tmp);
return level * tmp.getKey()
+ levelSumOfRightSubTree(tmp.getRightChild());
}
}
int levelOfNode(BTNode node) {
if (node == null)
return 0;
else
return 1 + levelOfNode(node.getParent());
}
它似乎不起作用。我知道这个解决方案有缺陷,但我无法修复它。有什么帮助吗?建议?获取提示。。在树上执行DFS遍历。然后对每个深度求和节点的值,并乘以深度+1。主要问题是,一旦开始向左移动,就会一直向左移动。你从不看左孩子的右孩子,反之亦然 您可以使用一个函数计算加权和,该函数同时接受节点及其级别。这将极大地简化实现,使其更容易正确 下面是一个近似实现(我还没有测试):
我把它作为一个练习,以了解如何为根节点调用它。只需从根开始,并初始化级别=1
sum = root.key()*level + weightedSum( root.left(), level + 1 ) + weightedSum( root.right(), level + 1 );
调用level=1的根节点,当我们向下移动时,向上移动level+1。您的解决方案简洁而优雅:-)
sum = root.key()*level + weightedSum( root.left(), level + 1 ) + weightedSum( root.right(), level + 1 );