Найти максимальный элемент в двоичном дереве - C (СИ)
Формулировка задачи:
Помогите решить задачку:найти максимальный элемент в двоичном дереве. Шаблон уже есть ,мне нужно написать функцию поиска максимального элемента.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct tag_tnode tnode;
struct tag_tnode{
int a;
tnode * left,*right;
};
tnode * maketree(int n){
tnode * ce;
if (!n )
return NULL;
ce = new tnode;
ce->a = rand()%11-5;
ce->left = maketree(n-1);
ce->right = maketree(n-1);
return ce;
}
void showtreelevel(int n, int s, tnode * cn){
int i,d;
char str[81];
if(s==n){
memset(str,0,81);
d=1;
d = (d<<(s-1))+1;
for(i=0;i<80/d;i++)
str[i]=32;
printf("%s%i",str,cn->a);
}else{
showtreelevel(n+1,s,cn->left);
showtreelevel(n+1,s,cn->right);
}
}
int process_appletree(tnode * cn, int level,int &counter){if(!cn) return 0;
else
return ge/*... и другие аргументы функции */){
//Здесь пишем текст функции обработки двоичного дерева
}
int main(){
tnode * fe;
int b;
fe = maketree(4);
for(b=1;b<=4;b++){
showtreelevel(1,b,fe);
printf("\n");
}
//Здесь выполняется вызов функции обработки двоичного дерева
return 0;
}Решение задачи: «Найти максимальный элемент в двоичном дереве»
textual
Листинг программы
int process_appletree(tnode *cn, int level, int *max)
{
if (cn == NULL)
return 0;
if (level == 1 || cn->a > *max)
*max = cn->a;
process_appletree(cn->left, level + 1, max);
process_appletree(cn->right, level + 1, max);
return 1;
}
Объяснение кода листинга программы
В данном коде представлен рекурсивный процесс обхода двоичного дерева с целью поиска максимального элемента. Список действий:
- Если узел, который необходимо обработать, равен NULL, то функция завершается и возвращает 0.
- Если уровень текущего узла равен 1 или значение в узле больше максимального значения, то максимальное значение обновляется.
- Рекурсивный вызов функции process_appletree для левого поддерева с увеличенным уровнем.
- Рекурсивный вызов функции process_appletree для правого поддерева с увеличенным уровнем.
- Возврат 1.