Question

I am constructing a binary tree. Let me know if this is a right way to do it. If not please tell me how to?? I could not find a proper link where constructing a general binary tree has been coded. Everywhere BST is coded.

  3
 / \
1   4
   / \
  2   5

This is the binary tree which i want to make.I should be able to do all the tree traversals.Simple stuff.

public class Binarytreenode
{
    public Binarytreenode left;
    public Binarytreenode right;
    public int data;

    public Binarytreenode(int data)
    {
        this.data=data;
    }

    public void printNode()
    {
        System.out.println(data);
    }

    public static void main(String ar[])
    {
        Binarytreenode root = new Binarytreenode(3);
        Binarytreenode n1 = new Binarytreenode(1);
        Binarytreenode n2 = new Binarytreenode(4);
        Binarytreenode n3 = new Binarytreenode(2);
        Binarytreenode n4 = new Binarytreenode(5);

        root.left = n1;
        root.right = n2;
        root.right.left = n3;
        root.right.right = n4;
    }
}
Was it helpful?

Solution

I think this is what you are looking for:

public class Binarytree
{
    private static Node root;

    public Binarytree(int data)
    {
        root = new Node(data);
    }

    public void add(Node parent, Node child, String orientation)
    {
        if (orientation.equals("left"))
        {
           parent.setLeft(child);
        }
        else
        {
            parent.setRight(child);
        }
    }

    public static void main(String args[])
    {
        Node n1 = new Node(1);
        Node n2 = new Node(4);
        Node n3 = new Node(2);
        Node n4 = new Node(5);

        Binarytree tree = new Binarytree(3); //  3
        tree.add(root, n1, "left"); //         1/ \
        tree.add(root, n2, "right"); //            4
        tree.add(n2, n3, "left"); //             2/ \
        tree.add(n2, n4, "right"); //                5
    }
}

class Node {
    private int key;
    private Node left;
    private Node right;

    Node (int key) {
        this.key = key;
        right = null;
        left = null;
    }

    public void setKey(int key) {
        this.key = key;
    }

    public int getKey() {
        return key;
    }

    public void setLeft(Node left) {
        this.left = left;
    }

    public Node getLeft() {
        return left;
    }

    public void setRight(Node right ) {
        this.right = right;
    }

    public Node getRight() {
        return right;
    }

}

OTHER TIPS

The idea behind a binary tree is that it is sorted. Any values larger than the current value are in the right node and every value smaller is in the left node. That means you shouldn't do the tree-building in your main program. Rather, every node should have an "insert" method which determines whether the new node should go to the left or the right of the current node. When you have a new node, you create that node, and then you call root.insert(newNode).

The insert-method would then work like this (because this is obviously a student assignment and you are supposed to learn from it, you only get pseudo-code from me, no complete solution):

When value is smaller than own value:
     When there already is a left-node:
         call left-node.insert(new-node)
     When there isn't a left-node yet:
         the left-node is now the new-node
When value is larger than own value:
     When there already is a right-node:
         call right-node.insert(new-node)
     When there isn't a right-node yet:
         the right-node is now the new-node
When value is equal to own value:
     Duplicate value. Either ignore the value or throw an exception.

Finding if an object already is in the tree works the same way:

When requested value is equal to the value of this node
     return this node
When the requested value is smaller
     When a left node exists
         call left.find(value)         
     When no left node exists
          value doesn't exist in this tree
When the requested value is larger
     When a right node exists
         call right.find(value)         
     When no right node exists
          value doesn't exist in this tree

In the case you don't actually want to learn how binary trees work and just use them, just use TreeSet which is an already working binary-tree implementation.

In my opinion since we are not sure what implementation the BinaryTree is when it comes to some methods like add and traverse, our best bet is to make it an abstract class. Im pretty sure this code is sufficient for a general Binarytree implementation.

What you want is an instance of a successor of a Binary Tree but I doubt its an instance of it.

public abstract class Binarytree
{
    private Node root;

    public Binarytreenode(int data)
    {
        root = new Node(data);
    }

    public abstract void add(int key);

    public abstract void traverse();


}

class Node {
    private int key;
    private Node left;
    private Node right;
    Node (int key) {
        this.key = key;
        right = null;
        left = null;
    }

    public void setKey(int key) {
        this.key = key;
    }

    public int getKey() {
        return key;
    }

    public void setLeft(Node left) {
        this.left = left;
    }

    public Node getLeft() {
        return left;
    }

    public void setRight(Node right ) {
        this.right = right;
    }

    public Node getRight() {
        return right;
    }

}

What you are doing looks fine as a starting point (although you may want to add a reference to the parent node if you plan to be able to move nodes around in the tree or do reverse traversals).

Depending on what you are using the binary tree for though you could just use a TreeMap.

The problem is though that we don't know what you are using your Binary Tree for, and a lot of the design and implementation complexities and decisions stem from that.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top