This blog will soon be merged with

JavaByPatel

which explains each solution in detail, to visit new blog, click JavaByPatel

Wednesday, 24 December 2014

Print All Nodes From Root to a Node Which Sum Up Given Number In Binary Search Tree

package tree;

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

 public Node getLeft() {
  return left;
 }

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

 public Node getRight() {
  return right;
 }

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

 public int getData() {
  return data;
 }

 public void setData(int data) {
  this.data = data;
 }
}


package tree;
 
/*    
              50
            /    \
          40      60
          /\      /\
        30  45   55 70
                 /\
                52 58
 
 */

public class PrintAllNodesFromRootToSumNodeInBinarySearchTree {
 private Node rootNode;

 public static void main(String[] args) {
  new PrintAllNodesFromRootToSumNodeInBinarySearchTree();
 }

 public PrintAllNodesFromRootToSumNodeInBinarySearchTree(){

  addNode(rootNode, 50); 
  addNode(rootNode, 40); 
  addNode(rootNode, 60); 
  addNode(rootNode, 30); 
  addNode(rootNode, 45); 
  addNode(rootNode, 55); 
  addNode(rootNode, 70); 
  addNode(rootNode, 52); 
  addNode(rootNode, 58); 

  //printTreeInOrder(rootNode);
  System.out.println();
  //printAllNodesFromRootToSumNodeInBottomUp(rootNode, 135, 0);
  System.out.println();
  printAllNodesFromRootToSumNodeInTopBottom(rootNode, 217, 0);

 }

 private boolean printAllNodesFromRootToSumNodeInBottomUp(Node rootNode, int sumToCheck, int sumTillNow) {
  boolean l=false,r=false;
  if(rootNode==null){
   return false;
  }

  int count = rootNode.getData();
  sumTillNow = sumTillNow + count;
  if(sumTillNow==sumToCheck){
   System.out.print(rootNode.getData() + " ");
   return true;
  }

  l = printAllNodesFromRootToSumNodeInBottomUp(rootNode.getRight(), sumToCheck, sumTillNow);
  r = printAllNodesFromRootToSumNodeInBottomUp(rootNode.getLeft(), sumToCheck, sumTillNow);
  if(l || r){
   System.out.print(rootNode.getData() + " ");
  }
  return (l || r);
 }

 private void printAllNodesFromRootToSumNodeInTopBottom(Node rootNode, int sumToCheck, int sumTillNow) {
  printAllNodesFromRootToSumNodeInTopBottomHelper(rootNode, sumToCheck, "", sumTillNow);
 }

 private void printAllNodesFromRootToSumNodeInTopBottomHelper(Node rootNode, int sumToCheck, String str, int sumTillNow) {
  if(rootNode==null){
   return;
  }

  int count = rootNode.getData();
  sumTillNow = sumTillNow + count;

  if(sumTillNow==sumToCheck){
   System.out.print(str+rootNode.getData());
   return;
  }
  printAllNodesFromRootToSumNodeInTopBottomHelper(rootNode.getRight(), sumToCheck, str+rootNode.getData() + " ", sumTillNow);
  printAllNodesFromRootToSumNodeInTopBottomHelper(rootNode.getLeft(), sumToCheck, str+rootNode.getData() + " ", sumTillNow);

 }


 private void printTreeInOrder(Node rootNode){
  if(rootNode==null)
   return;
  printTreeInOrder(rootNode.getLeft());
  System.out.print(rootNode.getData() + " ");
  printTreeInOrder(rootNode.getRight());
 }

 private void addNode(Node rootNode, int data){
  if(rootNode==null){
   Node temp1 = new Node(data);
   this.rootNode=temp1;
  }else{
   addNodeInProperPlace(rootNode, data);
  }
 }
 private void addNodeInProperPlace(Node rootNode, int data){ 
  if(data>rootNode.getData()){
   if(rootNode.getRight()!=null){
    addNode(rootNode.getRight(), data);
   }else{
    Node temp1 = new Node(data);
    rootNode.setRight(temp1);
   }
  }else if(data<rootNode.getData()){
   if(rootNode.getLeft()!=null){
    addNode(rootNode.getLeft(), data);
   }else{
    Node temp1 = new Node(data);
    rootNode.setLeft(temp1);
   }
  }else{
   //ToDo
  }
 }
}


No comments:

Post a Comment