Написать функцию для определения предельной глубины несимметричного двоичного дерева - 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);
 //Здесь пишем текст функции обработки двоичного дерева
 
}

Объяснение кода листинга программы

  1. Функция process_appletree принимает три параметра: cn (указатель на узел двоичного дерева), maxh (максимальная глубина дерева) и h (текущая глубина дерева).
  2. Если cn равен NULL, функция возвращает maxh.
  3. h увеличивается на 1.
  4. Если maxh меньше h, то maxh присваивается значение h.
  5. Рекурсивный вызов функции process_appletree для левого поддерева cn->left и передачей значений maxh и h.
  6. Рекурсивный вызов функции process_appletree для правого поддерева cn->right и передачей значений maxh и h.
  7. В этой точке может быть добавлен код обработки двоичного дерева.
  8. В этом месте возвращается максимальная глубина дерева.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы