This is the solution to here: link
- public class BuildSumTree {
- public static void main(String[] args) {
- Tree tree = Tree.getSumTree3();
- System.out.println(ifSumTree(tree, new MyInteger(0)));
- }
- /*
- * http://www.geeksforgeeks.org/check-if-a-given-binary-tree-is-sumtree/
- */
- public static boolean ifSumTree(Tree tree, MyInteger sum){
- if(tree==null||(tree.left==null&&tree.right==null)){ //return true if tree is null or leaf
- sum.i = 0;
- return true;
- }
- int lvalue = (tree.left==null)?0:tree.left.value;
- int rvalue = (tree.right==null)?0:tree.right.value;
- MyInteger lsum = new MyInteger(0);
- MyInteger rsum = new MyInteger(0);
- if(ifSumTree(tree.left, lsum)&&ifSumTree(tree.right, rsum)){
- sum.i = lsum.i + rsum.i + lvalue+rvalue;
- boolean result = sum.i==tree.value;
- return result;
- }
- return false;
- }
- /*
- * This is a sum tree. This tree will be checked if it is a sum tree
- */
- public static Tree getSumTree3(){
- Tree t1 = new Tree(34);
- Tree t2 = new Tree(12);
- Tree t3 = new Tree(5);
- Tree t4 = new Tree(3);
- Tree t5 = new Tree(3);
- Tree t6 = new Tree(2);
- Tree t7 = new Tree(3);
- Tree t8 = new Tree(1);
- Tree t9 = new Tree(2);
- Tree t10 = new Tree(1);
- Tree t11 = new Tree(1);
- Tree t12 = new Tree(1);
- t1.left = t2;
- t1.right = t3;
- t2.left = t4;
- t2.right = t5;
- t4.left = t8;
- t4.right = t9;
- t5.left = t10;
- t5.right = t11;
- t11.right = t12;
- t3.left = t6;
- t3.right = t7;
- return t1;
- }
- }