package com.interview.algorithms.tree; import com.interview.basics.model.tree.BinaryTree; import com.interview.basics.model.tree.BinaryTreeNode; import java.util.ArrayList; /** * Created with IntelliJ IDEA. * User: stefanie * Date: 7/17/14 * Time: 3:27 PM */ public class C5_16_TreeSumPath { public static void findSum(BinaryTree<Integer> tree, int sum){ int height = getHeight(tree.getRoot()); int[] buffer = new int[height]; printSum(tree.getRoot(), sum, buffer, 0); } private static void printSum(BinaryTreeNode<Integer> node, int sum, int[] buffer, int level){ if(node == null) return; buffer[level] = node.value; int tmp = 0; for(int i = level; i >= 0; i--){ tmp += buffer[i]; if(tmp == sum) printPath(buffer, i, level); } printSum(node.left, sum, buffer, level + 1); printSum(node.right, sum, buffer, level + 1); buffer[level] = 0; } private static void printPath(int[] buffer, int start, int end){ for(int i = start; i <= end; i++) System.out.print(buffer[i] + " "); System.out.println(); } private static int getHeight(BinaryTreeNode<Integer> node){ if(node == null) return 0; int left = getHeight(node.left); int right = getHeight(node.right); return Math.max(left, right) + 1; } }