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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于二叉樹與二叉搜索樹!

關于二叉樹與二叉搜索樹!

C C# C++
asdhjhg 2017-05-31 17:46:33
對于二叉搜索樹,我們如果要刪除一個節點,需要我們比較左右節點大小來找到這個節點,然后再有三種情況,無孩子,一個孩子,兩個孩子。但是,如果針對任意的二叉樹(非二叉搜索樹),那么如果要刪除任意數據,應該怎么C代碼實現呢?我自己寫了一個,不知可不可行,大神來給意見吶!以下是刪除功能的代碼struct?Node?*Find(struct?Node?*root) { while?(root?->?left?!=?NULL)?root?=?root?->?left; return?root; } struct?Node?*Delete(struct?Node?*root,?int?data) { if?(root?==?NULL)?return?root; if?(root?->?data?!=?data)? { root?->?left?=?Delete(root?->?left,?data); root?->?right?=?Delete(root?->?right,?data); } //wohoo....i?found?you,get?ready?to?delete! else { ????????//case?1?:?no?child if?(root?->?left?==?NULL?&&?root?->?right?==?NULL) { free(root);//C++?-->?delete?root; root?=?NULL; } //case?2?:?one?child else?if?(root?->?left?==?NULL) { struct?Node?*temp?=?root; root?=?root?->?right; free(temp);//C++?-->?delete?root; } else?if?(root?->?right?==?NULL) { struct?Node?*temp?=?root; root?=?root?->?left; free(temp);//C++?-->?delete?root; } else//case?3?:?two?children { struct?Node?*temp?=?Find(root);//find?a?data?to?replace?this?deleted?data root?->?data?=?temp?->?data; root?->?left?=?Delete(root?->?left,?temp?->?data);//Delete?the?data?I?found?on?the?left } } return?root; }
查看完整描述

目前暫無任何回答

  • 0 回答
  • 0 關注
  • 1629 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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