Помогите с анализом бинарного дерева на С++
Дан указатель P1 на корень непустого дерева. Вывести максимальное из значений его вершин и количество вершин, имеющих это максимальное значение.
я на жаве написал, нет под рукой сишной среды, переведи там не сложно (паблики, cout-ы и -> оформи как надо)
public class MyInt
{
public int value;
public MyInt left, right;
//генерация значений
public int generateValue()
{
return (int) (100*Math.random());
}
//конструктор от длины дерева
public MyInt(int layers)
{
this.value=this.generateValue();
if (layers<=1)
{
this.left=null;
this.right=null;
}
else
{
this.left=new MyInt(layers-1);
this.right=new MyInt(layers-1);
}
}
//вывод просто
public String allOut(int level)
{
String s="";
for (int i=0;i<level; i++)
{
s+="__";
}
s+="|_";
s+=this.value+"\n";
try
{
s += this.left.allOut(level + 1);
}
catch (NullPointerException e1){};
try
{
s += this.right.allOut(level + 1);
}
catch (NullPointerException e2){};
return s;
}
//сравнимаем себя с максом и передаем макс дальше по дереву
public int tryMax(int m)
{
int m1=m;
if (m1<=this.value) {m1=this.value;}
boolean noleft=(this.left==null);
boolean noright=(this.right==null);
if (noleft&&noright) {return m1;}
if (noright){m1=this.left.tryMax(m1); return m1;}
if (noleft){m1=this.right.tryMax(m1); return m1;}
m1=this.left.tryMax(m1);
m1=this.right.tryMax(m1);
return m1;
}
//сравниваем себя со значением и инкрементируем если совпало, прибавляем результат сравнения с дальнейшим деревом
public int countMax(int max)
{
int count=0;
if (this.value==max) {count++;}
boolean noleft=(this.left==null);
boolean noright=(this.right==null);
if (noleft&&noright) {return count;}
if (!noright){count+=this.right.countMax(max);}
if (!noleft){count+=this.left.countMax(max);}
return count;
}
}
public static void main(String[] args)
{
MyInt a=new MyInt(6);
System.out.println(a.allOut(0));
System.out.println(a.tryMax(0));
System.out.println(a.countMax(a.tryMax(0)));
}