C++非递归遍历删除树节点——广度优先,逐层删除

本文介绍了如何使用C++通过广度优先搜索(BFS)而非递归方式来遍历并删除树节点。这种方法适用于优化递归算法,特别是对于非二叉树的普通树结构,当递归不容易转化为迭代时。文中给出了删除树节点的示例代码,旨在提供一种非递归的树操作解决方案。
摘要由CSDN通过智能技术生成

C++标准库stl中没有现成的树的数据结构,但是一般都可以通过已有数据结构自定义获得:

假设定义树节点如下:(非二叉树,普通的树)

//****************************************************************//
//****节点                                                     ****//
//****************************************************************//
template <class T>
struct TreeNode {
    T _data;
    TreeNode *_parent;
    list<TreeNode*> _children;
    TreeNode(const T &data) : _data(data), _parent(NULL) {}
    const T &data() { return _data; }
    bool setParent(TreeNode *parent)//挂接父节点
    {
        if (parent == this->_parent)//如果相同,则无需变动
            return true;
        if (parent)//加入新父节点的子节点列表中
        {//注意:如果本节点为新父节点的某个祖先节点(包括新父节点本身),则不允许建立;
            TreeNode *ancestor = parent;
            while (ancestor && ancestor != this) ancestor = ancestor->_parent;
            if (ancestor) return false;//禁止
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值