Ask a Question
Ask Question Login
Corporate Training
  1. Community
  2. Java
  3. Question
Java

How to print a tree in java?

Asked by Ajit Yadav Oct 10, 2022 2.4K views 2 answers
Share

About this question

I have written a program to print a binary tree level by level on different lines, like the tree would actually look if drawn on paper.


I have done a BFS traversal and then I proceed to print the tree assuming it is complete binary tree:


import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class BinaryTreeLevelWise {
/**
 * This class represents the individual nodes of the binary tree
 * Each node has a left, right pointer of type Node
 * and Value to hold the value
 * @author Aneesh
 *
 */
class Node {
    Node left;
    Node right;
    int value;
    public Node(int value) {
        this.value = value;
    }
    @Override
    public String toString() {
        return "Node value=" + value + "";
    }
}
/**
 * Driver function to test the code
 * @param args
 */
public static void main(String[] args) {
    new BinaryTreeLevelWise().run();
}
/**
     * This function inserts an element into the binary tree
     * @param node
     * @param value
     */
    public void insert(Node node, int value) {
        if (value < node>            if (node.left != null) {
                insert(node.left, value);
            } else {
                System.out.println("  Inserted " + value + " to left of "
                        + node.value);
                node.left = new Node(value);
            }
        } else if (value > node.value) {
            if (node.right != null) {
                insert(node.right, value);
            } else {
                System.out.println("  Inserted " + value + " to right of "
                        + node.value);
                node.right = new Node(value);
            }
        }
    }
/**
 * Builds the tree and executes some functions
 */
public void run() {
    // build the simple tree from chapter 11.
    Node root = new Node(5);
    System.out.println("Binary Tree Example");
    System.out.println("Building tree with root value " + root.value);
    insert(root, 1);
    insert(root, 8);
    insert(root,-2);
    insert(root, 6);
    insert(root, 3);
    insert(root, 9);
    insert(root,-3);
    insert(root,-1);
    /*System.out.println("Traversing tree in order");
    printInOrder(root);
    System.out.println("Traversing tree front-to-back from location 7");
    printFrontToBack(root, 7);*/
    System.out.println("*************nPrinting the tree levelWise");
    printLevelWise(root);
}
/**
 * This functions uses a list of nodes and prints them level wise assuming a complete
 * binary tree.
 * Every level will have have 2^L elements where L is the level, root is level L=0 
 * @param Root of the tree of type {@link Node}
 */
public void printLevelWise(Node root) {
    // TODO Auto-generated method stub
    Queue nodes= new LinkedList<>(); 
    List listOfNodes = new ArrayList();
    //add root to the list
    traverseLevels(root, listOfNodes,nodes);
    //printing in a straight line
    //System.out.println("nodes are "+listOfNodes);
    // printing level wise
    int count = 0,level=0;
    while (count < listOfNodes>        int printLen= (int) Math.pow(2, level++);
        for (int i=count; i < printLen>            System.out.print(listOfNodes.get(i).value+" ");
        }
            System.out.println();
            count = printLen-1;
    }
}
/**
 * This function traverses the tree and puts all the nodes level wise into a list
 * @param root
 * @param listOfNodes
 * @param nodes 
 */
private void traverseLevels(Node root, List listOfNodes, Queue nodes) {
    // TODO Auto-generated method stub
    if (root!=null){
        nodes.add(root);
        listOfNodes.add(root);
        while(!nodes.isEmpty()){
            //standard BFS
            root= nodes.poll();
            if (root.left!=null) {
                listOfNodes.add(root.left);
                nodes.add(root.left);
            }
            if (root.right!=null) {
                listOfNodes.add(root.right);
                nodes.add(root.right);
            }
        }
    }
}
}
Output:
5
1 8
-2 3 6 9
-3 -1
Is this the correct method? Are there any more efficient methods?


Your answer

2 Answers

Ranjana Admin JanBask Expert Latest answer

Answered on Jun 5, 2024

Printing a tree in Java typically involves traversing the tree and printing the nodes in a structured format. Here’s a step-by-step guide on how to print a binary tree in Java:

1. Define the Tree Node Class

First, you need a class to represent each node in the tree. Here's a basic example for a binary tree node:

  class TreeNode {    int value;    TreeNode left;    TreeNode right;    TreeNode(int value) {        this.value = value;        left = null;        right = null;    }}

2. Define the Tree Structure and Traversal Methods

You will need methods to traverse the tree. Common traversal methods are in-order, pre-order, and post-order. For printing, in-order traversal is often used.

In-Order Traversal Method:

  void inOrderTraversal(TreeNode node) {    if (node != null) {        inOrderTraversal(node.left);  // Visit left subtree        System.out.print(node.value + " ");  // Visit node        inOrderTraversal(node.right);  // Visit right subtree    }}

3. Print the Tree Structure

To print the tree structure in a visually understandable way, you can use a depth-first approach with indentation to represent levels.

Print Tree Structure Method:

void printTree(TreeNode node, String prefix, boolean isLeft) {

      if (node != null) {        System.out.println(prefix + (isLeft ? "├── " : "└── ") + node.value);        printTree(node.left, prefix + (isLeft ? "│   " : "    "), true);        printTree(node.right, prefix + (isLeft ? "│   " : "    "), false);    }}

4. Example Usage

Here is how you can create a tree, and use the methods to print it:

  public class BinaryTree {    public static void main(String[] args) {        // Create the tree nodes        TreeNode root = new TreeNode(1);        root.left = new TreeNode(2);        root.right = new TreeNode(3);        root.left.left = new TreeNode(4);        root.left.right = new TreeNode(5);        root.right.left = new TreeNode(6);        root.right.right = new TreeNode(7);        // Print in-order traversal        System.out.print("In-Order Traversal: ");        inOrderTraversal(root);        System.out.println();        // Print tree structure        System.out.println("Tree Structure:");        printTree(root, "", true);    }    // In-Order Traversal Method    static void inOrderTraversal(TreeNode node) {        if (node != null) {            inOrderTraversal(node.left);            System.out.print(node.value + " ");            inOrderTraversal(node.right);        }    }    // Print Tree Structure Method    static void printTree(TreeNode node, String prefix, boolean isLeft) {        if (node != null) {            System.out.println(prefix + (isLeft ? "├── " : "└── ") + node.value);            printTree(node.left, prefix + (isLeft ? "│   " : "    "), true);            printTree(node.right, prefix + (isLeft ? "│   " : "    "), false);        }    }}

Explanation:

  • TreeNode Class: Defines the structure of a node in the tree.
  • inOrderTraversal Method: Prints the nodes in in-order traversal (left, root, right).
  • printTree Method: Prints the tree structure visually with branches representing the hierarchy.
  • BinaryTree Class: Contains the main method, creates a sample tree, and demonstrates the traversal and printing methods.

By using the above methods, you can easily print a tree in Java both in in-order traversal and in a structured tree format.

Was this helpful?

More Java discussions

Learn & Explore

Free tutorials and interview questions from industry experts — learn the skill, then get ready to prove it.

Latest Java Blogs

Guides, tips and career advice on Java from JanBask experts.