You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据结构与算法:如何在Tree结构中实现添加子节点功能

实现addChild函数的方案

一、addChild完整实现

直接在Tree.cpp的addChild函数里填入以下代码:

void Tree::addChild(Position* parent, Position* pos) {
    // 1. 设置pos的父指针指向parent
    pos->setParent(parent);
    
    // 2. 特殊情况:如果parent为空,说明pos是根节点
    if (parent == nullptr) {
        setRoot(pos);
    } else {
        // 把pos添加到parent的子节点列表末尾
        parent->getChildren().insertBack(pos);
    }
    
    // 3. 把pos添加到树的全局节点列表中
    positions->insertBack(pos);
}

二、迭代器相关说明

你不需要手动操作迭代器就能完成这个功能,因为PositionList已经封装好了插入接口:

  • insertBack(Position* pos)内部已经自动调用了insert(end(), pos),其中end()返回的就是PositionList::Iterator迭代器对象,内部已经处理了节点的前后指针绑定逻辑。

如果你之后需要遍历某个节点的子节点,就可以用迭代器实现,示例如下:

// 遍历parent的所有子节点
PositionList& children = parent->getChildren();
for (PositionList::Iterator it = children.begin(); it != children.end(); ++it) {
    Position& child = *it;
    cout << *child << endl; // 输出子节点的元素值
}

这里的迭代器本质是对列表节点指针的封装,重载了*、++、==等运算符,用来简化列表遍历操作,避免你直接操作裸指针出错。

三、注意事项

  1. 记得在Tree的构造函数中初始化positions指针,否则会触发空指针崩溃,构造函数里要加一行:
    positions = new PositionList();
    
  2. 你当前的main函数里创建了Tree对象后,需要调用addChild构建树结构,比如:
    // 根节点父指针为空
    tree.addChild(nullptr, mapWithPositions["/user/rt/courses"]);
    // 给根节点加子节点
    tree.addChild(mapWithPositions["/user/rt/courses"], mapWithPositions["cs016/"]);
    tree.addChild(mapWithPositions["/user/rt/courses"], mapWithPositions["cs252/"]);
    // 后续层级以此类推添加即可
    

内容的提问来源于stack exchange,提问作者RoseSkull123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:15:03