修剪左 child。通用树 C++

Prune left child. General tree C++

我正在尝试创建数据类型 "GeneralTree"

这些是我的属性:

template <class T>
class GeneralTree
{
   private:
       struct Node 
       {
           T tag;   //tag

           Node *leftchild; //left child 
           Node *rightbrother;  //right brother
           Node *father; //father
       };

       struct Node *root;

    public:
        ......
};

这是一般树(不是二叉树)。

我正在尝试编写以下函数:

void PruneLeftChild(Node n, GeneralTree<T>& dest)

n 是我要修剪树的节点 dest 是我要保存的通用树 n

这是我的代码:

 void PruneLeftChild(Node n, GeneralTree<T>& dest)
 {
     assert(n!=0);
     destroy(dest.root);
     dest.root = n->left;

     if(dest.root != 0)
     {
         dest.root->father = 0;
         n->left = 0;
     }
 }

destroy(...)摧毁一棵将军树

我认为我的代码只适用于二叉树。

如何修剪一般树上的左 child?

我想我找到了解决办法

void PruneLeftChild(Node n, GeneralTree<T>& dest)
{
    assert(n!=0);
    destroy(dest.root);
    dest.root = n->left;

    if(dest.root != 0)
    {
        if(n->leftchild->rightbrother != 0) //if there rightbrother, becomes leftchild  
        {
           n->leftchild = dest.root->rightbrother;
           dest.root->rightbrother = 0;
        }
        else    //if no rightbrother, it just prune
           n->leftchild = 0;

        dest.root->father = 0;
    }
}