[問題] 二元搜尋樹-刪除節點的演算法
在二元搜尋樹裡 我看不懂要刪除的節點左右還有節點的情況下的演算法
也就是其中的這段:
else{
tempNode=nodePtr->right;
while(tempNode->left)
tempNode=tempNode->left;
tempNode->left=nodePtr->left;
tempNode=nodePtr;
nodePtr=nodePtr->right;
delete tempNode;
}
完整的演算法如下: 可以幫忙說明一下嗎orz 已經想了一個晚上了還是不懂
謝謝!
void BinaryTree::deleteNode(int num,TreeNode *&nodePtr)
{
TreeNode *tempNode;
if(num<nodePtr->data)
deleteNode(num,nodePtr->left);
else if (num>nodePtr->data)
deleteNode(num,nodePtr->right);
else{
if(nodePtr==NULL)
cout<<"NUll node can not be deleted";
else if(nodePtr->right==NULL)
{
nodePtr=nodePtr->left;
}
else if(nodePtr->left==NULL)
{
nodePtr=nodePtr->right;
}
else{
tempNode=nodePtr->right;
while(tempNode->left)
tempNode=tempNode->left;
tempNode->left=nodePtr->left;
tempNode=nodePtr;
nodePtr=nodePtr->right;
delete tempNode;
}
showPreOrder(root);
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 68.70.61.100
推
08/31 20:45, , 1F
08/31 20:45, 1F
推
08/31 20:46, , 2F
08/31 20:46, 2F
→
08/31 20:46, , 3F
08/31 20:46, 3F
→
08/31 20:48, , 4F
08/31 20:48, 4F
推
08/31 21:15, , 5F
08/31 21:15, 5F
→
08/31 21:15, , 6F
08/31 21:15, 6F
→
08/31 21:16, , 7F
08/31 21:16, 7F
→
08/31 21:16, , 8F
08/31 21:16, 8F
→
08/31 21:16, , 9F
08/31 21:16, 9F
→
08/31 21:17, , 10F
08/31 21:17, 10F
→
08/31 21:56, , 11F
08/31 21:56, 11F
→
08/31 22:05, , 12F
08/31 22:05, 12F
→
08/31 22:08, , 13F
08/31 22:08, 13F
→
08/31 22:53, , 14F
08/31 22:53, 14F
→
08/31 22:54, , 15F
08/31 22:54, 15F
→
08/31 22:55, , 16F
08/31 22:55, 16F
→
08/31 23:10, , 17F
08/31 23:10, 17F
→
08/31 23:18, , 18F
08/31 23:18, 18F
推
09/01 00:17, , 19F
09/01 00:17, 19F
→
09/01 20:58, , 20F
09/01 20:58, 20F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章