如何在二叉树构建时就确定每一个节点的父亲?

原有以下类:
struct BiNode {//节点类
public:
    char data;//节点数据
    BiNode *lchild, *rchild;//左右孩子
    BiNode **parent;//父亲节点
};
class BiTree {//二叉树
private:
    BiNode * root;//根节点
    BiNode* create(string &s, int &pos);//构造节点
public:
    BiTree() { root = NULL;height = 0; }//构造函数,根初始化为空,高度初始化为0
        void createBiTree(string s);
         }

根据前序遍历构造二叉树的函数为:
BiNode * BiTree::create(string &s, int &pos)//输入的是一个string,以该string的第pos个字符string[pos]的值作为data,构建一个节点
{
    ++pos;//pos的初始值为-1,所以要先递增;这里的pos必须是引用类型,否则无法递增
    BiNode * t;
    if ((unsigned) pos >= s.size())//如果pos越界,返回NULL
        return NULL;
    else 
    {
        if (s[pos] == '#')
            t = NULL;//该节点为空节点 
        else //其他情况,非空节点
        {
            t = new BiNode;
            t->data = s[pos];//用s[pos]作为s的data
            t->lchild = create(s, pos);//递归构造左孩子
            if(t->lchild) t->lchild->parent = &t;
            t->rchild = create(s, pos);//递归构造右孩子;注意此处是根据前序遍历VLR构造二叉树;注意递归的顺序
            if (t->rchild) t->rchild->parent = &t;
        }
        return t;
    }
}
///按照前序遍历序列创建二叉树,调用上面的create函数

void BiTree::createBiTree(string s)
{
    int pos = -1;
    root = create(s, pos);//返回的是树的根节点
    root->parent = NULL;
}

原有的类BiNode中只定义了左右孩子,parent是我自己加入的。编译后提示parent访问权限错误,请问该如何在构造二叉树的时候就确实好父子关系?也就是可以对任意节点调用parent。  难道要用二级指针,把parent声明为BiNode **parent吗?麻烦给个思路


 
    


#C/C++#
全部评论

相关推荐

手撕没做出来是不是一定挂
Chrispp3:不会,写出来也不一定过
点赞 评论 收藏
分享
jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务