Given a Binary Tree, find vertical sum of the nodes that are in same vertical line. Print all sums through different vertical lines. Examples: 1 / \ 2 3 / \ / \ 4 5 6 7 The tree has 5 vertical lines Vertical-Line-1 has only one node 4 => vertical sum is 4 Vertical-Line-2: has only one node 2=> vertical sum is 2 Vertical-Line-3: has three nodes: 1,5,6 => vertical sum is 1+5+6 = 12 Vertical-Line-4: has only one node 3 => vertical sum is 3 Vertical-Line-5: has only one node 7 => vertical sum is 7 So expected output is 4, 2, 12, 3 and 7
You can do this in linear time by using a reverse() helper.
ReplyDelete// rotate array of size=size, by n positions
void rotate(int array[], int size, int n)
{
// reverse array[0...size-1]
reverse(array, 0, size-1);
// reverse A[0...n-1]
reverse(array, 0, n-1);
// reverse A[n...size-1]
reverse(array, n, size-1);
}
code :
void rev(int arr[],int start,int last)
{
int i,temp,j;
for(i=start,j=last;i<j;i++,j--)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int main()
{
int arr[]={1,2,3,4,5},i;
rev(arr,0,4);
rev(arr,0,1);
rev(arr,2,4);
for(i=0;i<5;i++)
printf("%d \t ",arr[i]);
return 0;
}
this runs in linear time.