A binary tree T is semi-balanced if for every node m in T:
R(m)/2 <= L(m) <= 2*R(m),
where L(m) is the number of nodes in the left-sub-tree of m and R(m) is the number of nodes in the right-sub-tree of m.
(a) Write a recurrence relation to count the number of semi-balanced binary trees with N
nodes.
(b) Provide a Dynamic Programming algorithm for computing the recurrence in (a).
How do i go about making the recurrence relation for this?
Does the following qualify?
if(node==NULL)
return;
if(given relation is true)
count++
else find for right tree;
find for left tree;
I guess he is asking more of a recurrence relation like a function or something.?
Also how do i go about doing the problem using dynamic programming? I guess i dont need to store anything if i apply the above suggested code snippet.
Kindly help.
Hint: Let
C(n)be number of semi-balanced trees withnnodes. If you know values forC(1), C(2), ..., C(n)than it is easy to calculateC(n+1)by taking root node and dividing remainingnnodes into left and right sub-trees by condition stated.Number of nodes in sub-trees can be from
n/3to2*n/3, since these values satisfy conditionR(n)/2 <= L(n) <= 2*R(n).Update:
C(n) = sum from n/3 to 2n/3 L(n)*R(n)