我想从二叉树中删除用户选择的节点。
我知道如何删除没有子节点的节点,但是当所选节点有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
既有左孩子又有右孩子。
最好的方法是什么?