二叉树操作主要功能

时间:2017-05-22 22:54:47

标签: java

我没有获得下面代码的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();


}
}

1 个答案:

答案 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案件。

我没有查看代码的其他部分,因为那不是问题所在。