Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Traversing through all nodes of a binary tree in Java

Let's say I have a simple binary tree node class, like so:

public class BinaryTreeNode {
    public String identifier = "";
    public BinaryTreeNode parent = null;
    public BinaryTreeNode left = null;
    public BinaryTreeNode right = null;

    public BinaryTreeNode(BinaryTreeNode parent, String identifier)
    {
        this.parent = parent; //passing null makes this the root node
        this.identifier = identifier;
    }

    public boolean IsRoot() {
        return parent == null;
    }
}

How would I add a method which is able to recursively traverse through any size tree, visiting each and every existing node from left to right, without revisiting a node that has already been traversed?

Would this work?:

public void traverseFrom(BinaryTreeNode rootNode)
{
    /* insert code dealing with this node here */

    if(rootNode.left != null)
        rootNode.left.traverseFrom(rootNode.left);

    if(rootNode.right != null)
        rootNode.traverseFrom(rootNode.right);
}
like image 405
RectangleEquals Avatar asked Mar 09 '13 02:03

RectangleEquals


People also ask

How do you traverse through every node in a binary tree?

Binary tree InOrder traversal in Java - Recursion To implement this algorithm, you can write a method to traverse all nodes of binary tree using InOrder traversal by following steps: Write a method inOrder(TreeNode node) Check if node == null, if yes then return, this is our base case. Call the inOrder(node.

What is the most common algorithm for traversing the nodes of a binary tree Java?

The inOrder traversal is one of the most popular ways to traverse a binary tree data structure in Java. The inOrder traversal is one of the most popular ways to traverse a binary tree data structure in Java.


2 Answers

There are 3 types of Binary tree traversal that you can achieve :

example:

consider this following Binary tree :

enter image description here

Pre-order traversal sequence: F, B, A, D, C, E, G, I, H (root, left, right)
In-order traversal sequence: A, B, C, D, E, F, G, H ,I (left, root, right)
Post-order traversal sequence: A, C, E, D, B, H, I, G, F (left, right, root)

code example:

left to right traversal of the Binary tree, nay In order Traversal of binary tree :

public void traverse (Node root){ // Each child of a tree is a root of its subtree.
    if (root.left != null){
        traverse (root.left);
    }
    System.out.println(root.data);
    if (root.right != null){
        traverse (root.right);
    }
}
like image 148
codeMan Avatar answered Oct 15 '22 18:10

codeMan


codeMan is right. The traversal will visit every node on the left. Once it reaches the last node on the left, it begins working its way back along the right-side nodes. This is a depth-first search (DFS) traversal. As such, each node is visited only once, and the algorithm runs in O(n) time. Happy coding.

like image 26
RouteMapper Avatar answered Oct 15 '22 19:10

RouteMapper