[英]Binary Tree sum of odd nodes
我想知道所有奇数节点的总和,并以递归方式对其进行编程。 但我不能让它工作所以也许你们可以帮助我......
这是我的 BinNode 类
package com.company;
public class BinNode {
public int element;
public BinNode left, right;
public BinNode(int e, BinNode l, BinNode r) {
element = e;
left = l;
right = r;
}
public BinNode(int e) {
element = e;
left = null;
right = null;
}
}
现在我的方法首先查看树是否为空,否则如果它不是它会调用递归方法
public int countOdd() {
if(root == null) {
return 0;
}
return countOdd_rek(root);
}
现在的方法
private int countOdd_rek(BinNode bn) {
int odd, oddRight, oddLeft;
odd = oddRight = oddLeft = 0;
if(bn.left != null) {
if(bn.left.element % 2 != 0) { //add +1 if bn.left is odd
oddLeft +=1;
}
countOdd_rek(bn.left);
}
if(bn.right != null) {
if(bn.right.element % 2 != 0) { //add +1 if bn.right is odd
oddRight +=1;
}
countOdd_rek(bn.right);
}
//add +1 if root is also odd
if(bn.element % 2 != 0)
odd = 1 + oddLeft + oddRight;
//add nothing if root isnt odd
if(bn.element % 2 == 0)
odd = 0 + oddLeft + oddRight;
return odd;
}
也许有人可以帮助它会非常好...谢谢
编辑我解决了它的解决方案:
private int countOdd_rek(BinNode bn) {
int odd, oddRight, oddLeft;
odd = oddRight = oddLeft = 0;
if(bn.left != null) {
oddLeft += countOdd_rek(bn.left);
}
if(bn.right != null) {
oddRight += countOdd_rek(bn.right);
}
//add +1 if root is also odd
if(bn.element % 2 != 0)
odd = 1 + oddLeft + oddRight;
//add nothing if root isnt odd
if(bn.element % 2 == 0)
odd = 0 + oddLeft + oddRight;
return odd;
}
您的主要问题是您实际上并没有对countOdd_rek(...)
的值做任何事情。 此外,您正在定义局部变量来存储奇数,这些奇数将被每个递归方法调用覆盖。 一个更干净的方法是这样的:
public class BinNode {
public int element;
public BinNode left, right;
public BinNode(int e, BinNode l, BinNode r) {
element = e;
left = l;
right = r;
}
public BinNode(int e) {
element = e;
left = null;
right = null;
}
public static int countOdd(BinNode root) {
return countOdd_rek(root);
}
private static int countOdd_rek(BinNode bn) {
if (bn == null) {
return 0;
}
if (bn.element % 2 != 0) {
//add +1 if root is also odd
return 1 + countOdd_rek(bn.left) + countOdd_rek(bn.right);
} else {
return countOdd_rek(bn.left) + countOdd_rek(bn.right);
}
}
public static void main(String[] args) {
BinNode root = new BinNode(1,
new BinNode(2,
new BinNode(4, null, null),
new BinNode(5, null, null)),
new BinNode(3,
new BinNode(6, null, null),
new BinNode(7, null, null)));
System.out.println(countOdd(root));
}
}
我也在 main 方法中为您添加了一个示例。
如果您有任何问题,请告诉我。
编辑:刚刚看到你自己解决了。 干得好——我想你可以看看我的代码作为参考。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.