c - BST 二叉树删除 C 中值 = 0 的叶子的函数

标签 c tree binary-tree binary-search-tree

我正在尝试在 C 中创建一个函数,该函数应该能够从二叉树 (BST) 中移除(删除)所有叶子,该树作为参数传递,具有零值 (0) 并且返回结果将是删除的叶子的数量。注意:不是 value = 0 的节点,而是只有叶子。以图中的BST为例:

enter image description here

该函数将返回 2(在删除红色圆圈零之后)。

最佳答案

这是一个伪代码:

int delete_zero_leaves (node){
    int deleted
    delete_zero_leaves_aux (node, &deleted);
    return deleted
}

pointer delete_zero_leaves_aux (node, deleted){
    boolean is_leaf = true
    // if there is a child
    if (node->left != NULL){
            // passing deleted by reference
            node->left = delete_zero_leaves_aux (node->left, &deleted)
            is_leaf = false
    }
    // if there is a child on the right side
    if (node->right != NULL){
            // passing deleted by reference
            node->right = delete_zero_leaves_aux (node->right, &deleted)
            is_leaf = false
    }
    if (is_leaf AND node->value == 0){
        free(node)
        deleted += 1
        return NULL
    }
    return node
}

既然你说节点没有指向它自己父亲的指针,你可以返回一个指针并设置父亲指针的值(左或右)。

关于c - BST 二叉树删除 C 中值 = 0 的叶子的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27348482/

相关文章:

c# - 在 C# 中实现树管理父子

c - 二叉搜索树中节点的删除

c++ - 迭代前序遍历(调试)

javascript - 深入了解 JavaScript 递归和调用堆栈优先遍历

java - NullPointerException 尝试从 JNI 填充数组

c - 如何检查 c 中未定义的行为?

c - 为什么我无法初始化指针变量并且无法使用gets?

c - 连续二维数组的重新分配

c - 排序 2 个数组 - 一个字符和一个整数

c - 释放二叉树 C 的内存