从充满字符串的二叉树中删除节点

时间:2019-05-29 14:36:27

标签: c binary-tree

我想从二叉树中删除用户选择的节点。

我知道如何删除没有子节点的节点,但是当所选节点有2个子节点时(例如节点B),我发现这很棘手。

这是我的main函数:

int main()
{
    NODE *root = newNode(root, "A"); // tree root

    // start of left subtree
    root->left = newNode(root->left, "B");
    root->left->left = newNode(root->left->left, "D");
    root->left->left->left = newNode(root->left->left->left, "G");
    root->left->right = newNode(root->left->right, "E");
    root->left->right->right = newNode(root->left->right->right, "H");
    root->left->right->right->left = newNode(root->left->right->right->left, "J");
    // end of left subtree

    // start of right subtree
    root->right = newNode(root->right, "C");
    root->right->right = newNode(root->right->right, "F");
    root->right->right->left = newNode(root->right->right->left, "I");
    // end of right subtree

    printf("Preorder: ");
    preorder(root);
    printf("\n");

    printf("Inorder: ");
    inorder(root);
    printf("\n");

    printf("Postorder: ");
    postorder(root);
    printf("\n");

    removeNode(root->left); // this is supposed to remove B

    return 0;
}

应该使用removeNode函数来接收节点root->left('B')  并将其从二叉树中删除。

我不确定如何执行此操作,因为节点B既有左孩子又有右孩子。

最好的方法是什么?

The binary tree in question

0 个答案:

没有答案