using
System;
using
System.Collections.Generic;
class
Node {
public
int
data;
public
Node left;
public
Node right;
public
Node(
int
val)
{
data = val;
left =
null
;
right =
null
;
}
}
class
MainClass {
static
int
GetHeight(Node root)
{
if
(root ==
null
)
return
0;
int
leftHeight = GetHeight(root.left);
int
rightHeight = GetHeight(root.right);
return
1 + Math.Max(leftHeight, rightHeight);
}
static
int
CountTriPath(Node root,
int
ind,
List<
int
> triNum,
int
count)
{
if
(root ==
null
|| !(triNum[ind] == root.data)) {
return
count;
}
if
(root.left ==
null
&& root.right ==
null
) {
count++;
}
count = CountTriPath(root.left, ind + 1, triNum,
count);
return
CountTriPath(root.right, ind + 1, triNum,
count);
}
static
int
CountTriangularNumberPath(Node root)
{
int
n = GetHeight(root);
List<
int
> triNum =
new
List<
int
>();
int
current_level = 1;
int
triangular_number = 0;
for
(
int
i = 1; i <= n; i++) {
triangular_number += current_level;
triNum.Add(triangular_number);
current_level++;
}
int
cntPath = CountTriPath(root, 0, triNum, 0);
return
cntPath;
}
public
static
void
Main(
string
[] args)
{
Node root =
new
Node(1);
root.left =
new
Node(3);
root.right =
new
Node(3);
root.left.left =
new
Node(2);
root.left.right =
new
Node(5);
root.right.left =
new
Node(6);
root.right.right =
new
Node(7);
root.right.left.right =
new
Node(10);
int
ans = CountTriangularNumberPath(root);
Console.WriteLine(ans);
}
}