public TreeNode(int[] values) : this(values, 0) {}
TreeNode(int[] values, int index)
Load(this, values, index);
void Load(TreeNode tree, int[] values, int index)
this.Value = values[index];
if (index * 2 + 1 < values.Length)
this.Left = new TreeNode(values, index * 2 + 1);
if (index * 2 + 2 < values.Length)
this.Right = new TreeNode(values, index * 2 + 2);
public void ProcessNode(TreeNode node, int depth, int key, ref int[] mas, ref int i)
ProcessNode(node.Left, depth, key, ref mas, ref i);
if (node.Right != null) {
ProcessNode(node.Right, depth, key, ref mas, ref i);
public static void Main(string[] args) {
int[] values = new int[] {1, 2, 3, 4, 5};
TreeNode tree = new TreeNode(values);
Process process = new Process();
process.ProcessNode(tree, depth, key, ref mas, ref i);