1
我必须创建一个使树不为空的函数,通过将树中的每个叶子的内容包含在从根到叶的路径(包括根和叶)的节点中的值。使用从根到叶的路径总和来更改树的叶子的值
所以我创造了这个:
void sum(BinTree t) {
while(!t.isLeaf()) {
sumL += sum(t.left);
sumR += sum(t.right);
}
t.element = ?;
}
boolean isLeaf(BinTree t) {
return t.left == null && t.right == null;
}
我应该把什么代替 “?”?我不认为该函数是正确的.. 我无法为二叉树创建递归函数,我觉得他们很复杂..
感谢
编辑:我changhed我方法:
void leafSum(BinTree t) {
sumLeaf(root, 0);
}
void leafSum(BinTree t, int tot) {
if(t->left == NULL && t->right == NULL)
t->elem = tot;
else {
sumLeaf(t->left, tot + t->elem);
sumLeaf(t->right, tot + t->elem);
}
}
对不起,听起来很刺耳,但这意味着你需要尝试更多,并学习更多。你将如何执行这项任务? –
查看这篇有关树遍历的wiki文章:http://rosettacode.org/wiki/Tree_traversal#Java Java中有一些例子可以复制和粘贴,只需要修改数学。是的,所有的例子都是递归的。虽然可以遍历一个没有递归的树,但它被广泛认为是一个丑陋的解决方案。 –