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