Написать функцию для определения предельной глубины несимметричного двоичного дерева - 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 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 maxh, int h)
{
if(!cn) return maxh;
h++;
if(maxh<h) maxh = h;
process_appletree(cn->left, maxh, h);
process_appletree(cn->right, maxh, h);
//Здесь пишем текст функции обработки двоичного дерева
}
Объяснение кода листинга программы
- Функция
process_appletreeпринимает три параметра:cn(указатель на узел двоичного дерева),maxh(максимальная глубина дерева) иh(текущая глубина дерева). - Если
cnравен NULL, функция возвращаетmaxh. hувеличивается на 1.- Если
maxhменьшеh, тоmaxhприсваивается значениеh. - Рекурсивный вызов функции
process_appletreeдля левого поддереваcn->leftи передачей значенийmaxhиh. - Рекурсивный вызов функции
process_appletreeдля правого поддереваcn->rightи передачей значенийmaxhиh. - В этой точке может быть добавлен код обработки двоичного дерева.
- В этом месте возвращается максимальная глубина дерева.