修剪离开了孩子。一般树C ++

时间:2015-01-11 16:59:29

标签: c++ algorithm tree

我正在尝试创建数据类型“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(...)销毁一般树

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

如何在一般树上修剪左孩子?

1 个答案:

答案 0 :(得分:0)

我想我找到了解决方案

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;
    }
}