Назначение глубины каждому узлу

Я прочитал здесь несколько других статей, которые выглядели похожими, но не совсем отвечали на мою проблему. Мне был задан вопрос о назначении каждому узлу двоичного дерева его соответствующей глубины. Я просто не могу этого понять.

Для справки это мой код:

struct treeNode {
   int item;
   int depth;
   treeNode *left;
   treeNode *right;
};
typedef treeNode *Tree;

int assignDepth(Tree &T, int depth)
{
    if(T!=NULL)
    {
        depth = assignDepth(T->left, depth++);
        T->depth = depth;
        depth = assignDepth(T->right, depth++);
    }
    else //leaf
        return depth--;
}

Я попытался пройти его ручкой и бумагой, и это выглядело нормально, но мне явно не хватает навыков проверки стола.

Кто-нибудь может указать мне правильное направление, пожалуйста? Я впервые использую деревья, и рекурсия не является моей сильной стороной.

Ответ:

void treecoords(Tree &T, int depth)
{
    static int count = -1; //set to -1 so the precrement before assignment doesn't give the wrong values
    if(T!=NULL)
    {
        treecoords(T->left, depth+1); //depth decrements automatically once this function call is removed from the stack
        count++;
        T->x = count;
          T->y = depth;
        treecoords(T->right, depth+1);
    } 
}
6
задан Dukeling 19 October 2013 в 20:37
поделиться