修剪左 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;
}
}
我正在尝试创建数据类型 "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;
}
}