Show Buttons
Share On Facebook
Share On Twitter
Share On Google Plus
Share On Linkdin
Share On Pinterest
Share On Reddit
Share On Stumbleupon
Contact us
Hide Buttons

Print All The Nodes Which are X distance from the Root

Objec­tive: - Given Binary Tree, Print all the nodes which are X dis­tance from the root

Exam­ple :

Nodes at X distances from root

Nodes at X dis­tances from root

Appraoch:

  • Idea is very simple.
  • Do the pre­order tra­ver­sal, pass x as parameter.
  • While going down, at each level, keep reduc­ing the x by 1
  • When x = 0 , the means you have reached to the nodes which are at x dis­tance from root, Print them.

Com­plete Code:

package PrintNodesAtKDistance;

public class PrintNodesAtKDistance {
	public void print(Node root, int k) {
		if (root != null) {
			if (k == 0) {
				System.out.print(" " + root.data);
			}
			print(root.left, --k);
			print(root.right, k);
		}
	}

	public static void main(String[] args) throws java.lang.Exception {
		Node root = new Node(1);
		root.left = new Node(2);
		root.right = new Node(3);
		root.left.left = new Node(4);
		root.left.right = new Node(5);
		root.left.right.left = new Node(6);
		root.left.right.right = new Node(7);
		root.right.right = new Node(8);
		root.right.right.right = new Node(9);
		PrintNodesAtKDistance i = new PrintNodesAtKDistance();
		System.out.println("Nodes at 3 distance from root : ");
		i.print(root, 3);
	}
}

class Node {
	int data;
	Node left;
	Node right;

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

Output:
Nodes at 3 distance from root : 
 6 7 9

You may also like...

  • Ramachan­dran Krishnan

    Code should be like that
    pub­lic void print(Node root, int k) {
    if (root != null) {
    if (k == 0) {
    System.out.print(“ ” + root.data);
    }
    print(root.left, –k);
    print(root.right, –k);
    }
    }

    • eugen_nw

      I’d rather go with:

      pub­lic void print(Node root, int k) {

      if (root == null) {
      return;
      }

      if (k == 0) {
      System.out.print(“ ” + root.data);
      return; // there’s no point in iter­at­ing any fur­ther
      }
      k–;
      print(root.left, k);
      print(root.right, k);
      }