using
System;
using
System.Collections.Generic;
using
System.Collections;
using
System.Linq;
class
Node {
public
Node left;
public
Node right;
public
int
data;
public
Node(
int
val){
data = val;
left =
null
;
right =
null
;
}
}
class
HelloWorld {
public
static
void
fillMap(Node root,
int
d,
int
l, IDictionary<
int
, KeyValuePair<
int
,
int
> > m){
if
(root ==
null
)
return
;
if
(m.ContainsKey(d) ==
false
)
m.Add(
new
KeyValuePair<
int
, KeyValuePair<
int
,
int
>>(d,
new
KeyValuePair<
int
,
int
>(root.data, l)));
else
if
(m[d].Value > 1){
m[d] =
new
KeyValuePair<
int
,
int
>(root.data, l);
}
fillMap(root.left, d - 1, l + 1, m);
fillMap(root.right, d + 1, l + 1, m);
}
public
static
int
SumOfTopView(Node root)
{
IDictionary<
int
, KeyValuePair<
int
,
int
> > m =
new
Dictionary<
int
, KeyValuePair<
int
,
int
>>();
fillMap(root, 0, 0, m);
int
ans = 0;
foreach
(KeyValuePair<
int
, KeyValuePair<
int
,
int
>> i
in
m)
{
ans += i.Value.Key;
}
return
ans;
}
static
void
Main() {
Node root =
new
Node(1);
root.left =
new
Node(2);
root.right =
new
Node(3);
root.left.right =
new
Node(4);
root.left.right.right =
new
Node(5);
root.left.right.right.right =
new
Node(6);
Console.WriteLine(SumOfTopView(root));
}
}