我正在尝试创建数据类型“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(...)
销毁一般树
我认为我的代码只适用于二叉树。
如何在一般树上修剪左孩子?
答案 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;
}
}