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

数组实现二叉树:删除含子树节点及剩余节点计数方法

数组实现二叉树的节点删除(含子树)与统计:用for循环实现方案

当然可以用for循环搞定这个需求!先明确咱们的数组二叉树规则:一般这种顺序存储是完全二叉树格式——索引为i的节点,左孩子是2*i+1,右孩子是2*i+2(从0开始索引,对应你代码里首元素是根的逻辑)。

下面给你拆解实现步骤,附完整代码:

核心思路

  • 先定位要删除的目标节点,然后用for循环遍历标记它的所有子树节点
  • 最后遍历数组统计未被标记的节点数量即可

完整实现代码

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int N;
    cout << "输入节点总数N: ";
    cin >> N;
    int A[100];
    cout << "输入" << N << "个节点值: ";
    for (int i = 0; i < N; ++i) {
        cin >> A[i];
    }
    int X;
    cout << "输入要删除的节点值X: ";
    cin >> X;

    // 第一步:找到目标节点的索引
    int target_idx = -1;
    for (int i = 0; i < N; ++i) {
        if (A[i] == X) {
            target_idx = i;
            break;
        }
    }
    if (target_idx == -1) {
        cout << "未找到节点X,剩余节点数:" << N << endl;
        return 0;
    }

    // 标记要删除的节点集合
    bool to_delete[100] = {false};
    vector<int> process_list;
    process_list.push_back(target_idx);
    to_delete[target_idx] = true;

    // 用for循环遍历处理所有子树节点(替代递归)
    for (int i = 0; i < process_list.size(); ++i) {
        int curr_node = process_list[i];
        int left_child = 2 * curr_node + 1;
        int right_child = 2 * curr_node + 2;

        // 左孩子存在则标记并加入处理列表
        if (left_child < N && !to_delete[left_child]) {
            to_delete[left_child] = true;
            process_list.push_back(left_child);
        }
        // 右孩子存在则标记并加入处理列表
        if (right_child < N && !to_delete[right_child]) {
            to_delete[right_child] = true;
            process_list.push_back(right_child);
        }
    }

    // 统计剩余节点数量
    int remaining_count = 0;
    for (int i = 0; i < N; ++i) {
        if (!to_delete[i]) {
            remaining_count++;
        }
    }

    cout << "删除节点及其子树后,剩余节点数:" << remaining_count << endl;
    return 0;
}

关键细节说明

  • 用vector<int> process_list来存需要处理的节点索引,通过for循环遍历这个列表,就能把目标节点的所有子节点都标记出来,完美替代递归逻辑
  • 布尔数组to_delete用来记录哪些节点要被删除,避免重复处理同一节点
  • 如果你的节点值可能重复,可以调整查找逻辑(比如删除所有匹配X的节点,而不是第一个)
  • 要是想直接修改原数组,可以把标记的位置设为特殊值(比如-1),之后统计非特殊值的元素数量,效果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:40:25