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