我没有获得下面代码的o / p。我的countinternalnodes是正确的吗?我需要在main函数中进行哪些更改才能获得o / p。运行代码时我没有收到错误。如何将变量输入countinternalnodes函数。
class Node
{
int data;
Node left, right;
public Node(int item)
{
data = item;
left = right = null;
}
}
public class BinaryTree {
Node root;
public void insert(int id){
Node newNode = new Node(id);
if(root==null){
root = newNode;
return;
}
Node current = root;
Node parent = null;
while(true){
parent = current;
if(id<current.data){
current = current.left;
if(current==null){
parent.left = newNode;
return;
}
}
else{
current = current.right;
if(current==null){
parent.right = newNode;
return;
}
}
}
}
public int getLeafCount()
{
return getLeafCount(root);
}
public int getLeafCount(Node node)
{
if (node == null)
return 0;
if (node.left == null && node.right == null)
return 1;
else
return getLeafCount(node.left) + getLeafCount(node.right);
}
public int numNodesIn(Node v) {
if (v == null) return 0;
return 1 + numNodesIn(v.left) + numNodesIn(v.right);
}
public int numEdgesIn(Node v) {
return v == null? 0 : numNodesIn(v) - 1;
}
public void display(Node root){
if(root!=null){
System.out.print(" " + root.data);
display(root.left);
display(root.right);
}
}
int countinternalnodes(Node e)
{
if(e == root)
{
return 0;
}
if(e.left == null && e.right == null)
{
return 1;
}
else
{
return countinternalnodes(e.left)+countinternalnodes(e.right);
}
}
public int maxDepth(Node root) {
if(root==null)
return 0;
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
int bigger = Math.max(leftDepth, rightDepth);
return bigger+1;
}
// Main Function
public static void main (String[] args)
{
BinaryTree b = new BinaryTree();
b.insert(3);b.insert(0);
b.insert(1);b.insert(4);b.insert(6);b.insert(2);b.insert(10);b.insert(9);
b.insert(20);b.insert(25);b.insert(15);b.insert(16);
System.out.println("Original Tree : ");
b.display(b.root);
System.out.println("count internal nodes : ");
b.countinternalnodes(b.root);// part is not working
b.maxDepth(b.root);
b.getLeafCount();
}
}
答案 0 :(得分:0)
首先:你没有打印这个价值,不知道你是忘了把它粘贴在这里还是什么,但是你需要这样做:
System.out.println(b.countinternalnodes(b.root));
第二:价值是错误的。你正在将b.root
传递给这个方法,然后立即检查传递的参数是否为root(在这种情况下它是),所以它返回0
,我不认为& #39; s你想要的。
第三:当值实际上有孩子时计算的问题。您正在执行return countinternalnodes(e.left) + countinternalnodes(e.right);
,但您忘记了该值本身,因此您需要为此添加1
。通常我将你的方法改为:
int countinternalnodes(Node e) {
if (e == null)
return 0;
if (e.left == null && e.right == null)
return 1;
else
return 1 + countinternalnodes(e.left) + countinternalnodes(e.right);
}
不确定这是否是你想要的,来自名称countInternal
我猜输出不应该算根,但确实如此,只需减去1
案件。
我没有查看代码的其他部分,因为那不是问题所在。