亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

二叉樹數組實現中刪除結點函數的問題

萬一刪除的不是樹葉而是中間的某一個內點,這樣刪除結點不用把其整個子樹給刪除掉嗎?

正在回答

4 回答

在Tree類中定義一個void DiGui(int nodeIndex);方法來遞歸刪除左右節點:

void Tree::DiGui(int nodeIndex)
{
?int currentNodeIndex = nodeIndex;
?if(nodeIndex * 2 + 1 < m_iSize)
?{
??nodeIndex = nodeIndex * 2 + 1;
??m_pTree[nodeIndex] = 0;
??DiGui(nodeIndex);
?}
?if(currentNodeIndex * 2 + 2 < m_iSize)
?{
??currentNodeIndex = currentNodeIndex * 2 + 2;
??m_pTree[currentNodeIndex] = 0;
??DiGui(currentNodeIndex);
?}
}

在bool DeleteNode(int nodeIndex, int *pNode);方法中實現:

bool Tree::DeleteNode(int nodeIndex, int *pNode)
{
?if (nodeIndex < 0 || nodeIndex >= m_iSize)
?{
??return false;
?}
?if (m_pTree[nodeIndex] == 0)
?{
??return false;
?}
?*pNode = m_pTree[nodeIndex];
?m_pTree[nodeIndex] = 0;
?DiGui(nodeIndex);
?return true;
}

1 回復 有任何疑惑可以回復我~

嗯,支持哈。。。我直接在DeleteNode()函數中加了個遞歸去做了。

//刪除結點
bool Tree::DeleteNode(int nodeIndex, int &node)
{
?if (nodeIndex < 1 || nodeIndex > m_iSize)
?{
??return false; //位置異常
?}
?if (NODENULL == m_pTree[nodeIndex])
?{
??return false; //結點不存在
?}
?node = m_pTree[nodeIndex];
?m_pTree[nodeIndex] = NODENULL;
?//將該結點的子結點都置空,遞歸刪除左孩子和右孩子
?int temp = 0;
?DeleteNode(nodeIndex * 2, temp);
?DeleteNode(nodeIndex * 2 + 1, temp);

?return true;
}

0 回復 有任何疑惑可以回復我~

那數組中不應該也要考慮這種情況嗎

0 回復 有任何疑惑可以回復我~

在刪除節點時,如果二叉樹是以鏈表的方式存儲的,那么刪除結點將一起把該結點以及結點的整個子樹全部刪除。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

二叉樹數組實現中刪除結點函數的問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號