Search code examples
data-structurestreen-ary-tree

How to delete a nary tree ? each node has a parent pointer too in it


The structure of the node is below.

struct node
{
   int data;
   int noofchilds;
   node *child[n];
   node *parent;
 };

I would appreciate both recursive and non-recursive approaches.


Solution

  • Non-recursive version:

    struct node {
        struct node *parent;
        unsigned nchild;
        struct node *child[XXX];
        int data;
        };
    
    void deltree(struct node *np)
    {
    struct node *par;
    
    while (np) {
            /* if this node has any children, start by
            ** "descending" to the highest numbered child and kill that first.
            */
            if (np->nchild--) {
                    np = np->child[np->nchild];
                    continue;
                    }
            /* when we arrive here, *np has no more children left,
            ** so kill it, and step up to its parent
            */
            par = node->parent;
            // if np->child was obtained via malloc() uncomment next line
            // free (np->child);
            free (np);
            np = par;
            }
    return;
    }