程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 數據結構與算法04 之二叉樹

數據結構與算法04 之二叉樹

編輯:C#入門知識

數據結構與算法04 之二叉樹


在有序數組中,可以快速找到特定的值,但是想在有序數組中插入一個新的數據項,就必須首先找出新數據項插入的位置,然後將比新數據項大的數據項向後移動一位,來給新的數據項騰出空間,刪除同理,這樣移動很費時。顯而易見,如果要做很多的插入和刪除操作和刪除操作,就不該選用有序數組。

另一方面,鏈表中可以快速添加和刪除某個數據項,但是在鏈表中查找數據項可不容易,必須從頭開始訪問鏈表的每一個數據項,直到找到該數據項為止,這個過程很慢。

樹這種數據結構,既能像鏈表那樣快速的插入和刪除,又能想有序數組那樣快速查找。這裡主要實現一種特殊的樹——二叉(搜索)樹。二叉搜索樹有如下特點:一個節點的左子節點的關鍵字值小於這個節點,右子節點的關鍵字值大於或等於這個節點。插入一個節點需要根據這個規則進行插入。

刪除節點時二叉搜索樹中最復雜的操作,但是刪除節點在很多樹的應用中又非常重要,所以詳細研究並總結下特點。刪除節點要從查找要刪的節點開始入手,首先找到節點,這個要刪除的節點可能有三種情況需要考慮:

·該節點是葉節點,沒有子節點

·該節點有一個子節點

·該節點有兩個子節點

第一種最簡單,第二種也還是比較簡單的,第三種就相當復雜了。下面分析這三種刪除情況:

要刪除葉節點,只需要改變該節點的父節點對應子字段的值即可,由指向該節點改為null就可以了。垃圾回收器會自動回收葉節點,不需要自己手動刪掉;當節點有一個子節點時,這個節點只有兩個連接:連向父節點和連向它唯一的子節點。需要從這個序列中剪斷這個節點,把它的子節點直接連到它的父節點上即可,這個過程要求改變父節點適當的引用(左子節點還是右子節點),指向要刪除節點的子節點即可;第三種情況最復雜,如果要刪除有兩個子節點的節點,就不能只用它的一個子節點代替它,比如要刪除節點25,如果用35取代它,那35的左子節點是15呢還是30?

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved