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

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;//禁止
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值