九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網! | 幫助中心 裝配圖網zhuangpeitu.com!
裝配圖網
ImageVerifierCode 換一換
首頁 裝配圖網 > 資源分類 > PPT文檔下載  

數據結構嚴蔚敏第6章課件

  • 資源ID:100104128       資源大小:1.80MB        全文頁數:141頁
  • 資源格式: PPT        下載積分:30積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要30積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復下載(系統自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預覽文檔經過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標題沒有明確說明有答案則都視為沒有答案,請知曉。

數據結構嚴蔚敏第6章課件

數據結構嚴蔚敏第6章第六章第六章樹和二叉樹樹和二叉樹數據結構嚴蔚敏第6章教學目的和要求教學目的和要求 1、熟練掌握二叉樹的結構特點,了解相應的證明。、熟練掌握二叉樹的結構特點,了解相應的證明。 2、熟悉二叉樹的各種存儲結構的特點及適用范圍。、熟悉二叉樹的各種存儲結構的特點及適用范圍。 3、掌握二叉樹遍歷的遞歸與非遞歸算法。、掌握二叉樹遍歷的遞歸與非遞歸算法。 4、掌握二叉線索樹的相關算法。、掌握二叉線索樹的相關算法。 5、熟悉樹的各種存儲結構及特點,掌握樹和森林、熟悉樹的各種存儲結構及特點,掌握樹和森林與二叉樹的方法。與二叉樹的方法。 6、了解最優(yōu)樹的特性,掌握最優(yōu)樹和哈夫曼編碼、了解最優(yōu)樹的特性,掌握最優(yōu)樹和哈夫曼編碼的方法。的方法。數據結構嚴蔚敏第6章 1數據的邏輯結構 2、數據的存儲結構 3、數據的運算:檢索、排序、插入、刪除、修改等。 A線性結構 B非線性結構A 順序存儲 B 鏈式存儲 線性表棧隊樹形結構圖形結構數據結構的三個主要問題 數據結構嚴蔚敏第6章樹形結構樹形結構全校學生檔案管理的組織方式全校學生檔案管理的組織方式數據結構嚴蔚敏第6章ABCDEFGH樹形結構樹形結構 結點間具有分層次的連接關系結點間具有分層次的連接關系HBCDEFGA數據結構嚴蔚敏第6章6.1 樹的類型定義樹的類型定義6.2 6.2 二叉樹的類型定義二叉樹的類型定義6.3 二叉樹的存儲結構二叉樹的存儲結構6.4 二叉樹的遍歷二叉樹的遍歷6.5 線索二叉樹線索二叉樹6.6 樹和森林的表示方法樹和森林的表示方法6.7 樹和森林的遍歷樹和森林的遍歷6.8 哈夫曼樹與哈夫曼編碼哈夫曼樹與哈夫曼編碼數據結構嚴蔚敏第6章6.1 樹的類型定義樹的類型定義數據結構嚴蔚敏第6章數據對象數據對象 D:D是具有相同特性的數據元素的集合。是具有相同特性的數據元素的集合。 若若D為空集,則稱為空樹為空集,則稱為空樹 。 否則否則: (1) 在在D中存在唯一的稱為根的數據元素中存在唯一的稱為根的數據元素root; (2) 當當n1時,其余結點可分為時,其余結點可分為m (m0)個互個互 不相交的有限集不相交的有限集T1, T2, , Tm,其中每一,其中每一 棵子集本身又是一棵符合本定義的樹,棵子集本身又是一棵符合本定義的樹, 稱為根稱為根root的子樹。的子樹。 數據關系數據關系 R:數據結構嚴蔚敏第6章ABCDEFGHIJMKLA( B(E, F(K, L), C(G), D(H, I, J(M) )T1T3T2樹根例如例如: :數據結構嚴蔚敏第6章 基本操作:基本操作:查查 找找 類類 插插 入入 類類刪刪 除除 類類數據結構嚴蔚敏第6章 Root(T) / 求樹的根結點求樹的根結點 查找類:查找類:Value(T, cur_e) / 求當前結點的元素值求當前結點的元素值 Parent(T, cur_e) / 求當前結點的雙親結點求當前結點的雙親結點LeftChild(T, cur_e) / 求當前結點的最左孩子求當前結點的最左孩子 RightSibling(T, cur_e) / 求當前結點的右兄弟求當前結點的右兄弟TreeEmpty(T) / 判定樹是否為空樹判定樹是否為空樹 TreeDepth(T) / 求樹的深度求樹的深度TraverseTree( T, Visit() ) / 遍歷遍歷數據結構嚴蔚敏第6章InitTree(&T) / 初始化置空樹初始化置空樹 插入類:插入類:CreateTree(&T, definition) / 按定義構造樹按定義構造樹Assign(T, cur_e, value) / 給當前結點賦值給當前結點賦值InsertChild(&T, &p, i, c) / 將以將以c為根的樹插入為結點為根的樹插入為結點p的第的第i棵子樹棵子樹數據結構嚴蔚敏第6章 ClearTree(&T) / 將樹清空將樹清空 刪除類:刪除類:DestroyTree(&T) / 銷毀樹的結構銷毀樹的結構DeleteChild(&T, &p, i) / 刪除結點刪除結點p的第的第i棵子樹棵子樹數據結構嚴蔚敏第6章對比對比樹型結構樹型結構和和線性結構線性結構的結構特點的結構特點數據結構嚴蔚敏第6章線性結構線性結構樹型結構樹型結構第一個數據元素第一個數據元素 ( (無前驅無前驅) ) 根結點根結點 ( (無前驅無前驅) )最后一個數據元素最后一個數據元素 (無后繼無后繼)多個葉子結點多個葉子結點 ( (無后繼無后繼) )其它數據元素其它數據元素( (一個前驅、一個前驅、 一個后繼一個后繼) )其它數據元素其它數據元素( (一個前驅、一個前驅、 多個后繼多個后繼) )數據結構嚴蔚敏第6章基基 本本 術術 語語數據結構嚴蔚敏第6章結點結點: :結點的度結點的度: :樹的度樹的度: :葉子結點葉子結點: :分支結點分支結點: :數據元素+ +若干指向子樹的分支分支的個數樹中所有結點的度的最大值度為零的結點度大于零的結點DHIJM數據結構嚴蔚敏第6章(從根到結點的)路徑路徑:孩子孩子結點、雙親雙親結點兄弟兄弟結點、堂兄弟祖先祖先結點、子孫子孫結點結點的層次結點的層次: :樹的深度:樹的深度: 由從根根到該結點所經分支和結點構成ABCDEFGHIJMKL假設根結點的層次為1,第l 層的結點的子樹根結點的層次為l+1樹中葉子結點所在的最大層次數據結構嚴蔚敏第6章任何一棵非空樹是一個二元組 Tree = (root,F)其中:root 被稱為根結點 F 被稱為子樹森林森林:森林:是m(m0)棵互不相交的樹的集合ArootBCDEFGHIJMKLF數據結構嚴蔚敏第6章6.2 二叉樹的類型定義二叉樹的類型定義數據結構嚴蔚敏第6章 二叉樹或為空樹空樹,或是由一個根結根結點點加上兩棵兩棵分別稱為左子樹左子樹和右子樹的、互不交的互不交的二叉樹二叉樹組成。ABCDEFGHK根結點左子樹右子樹數據結構嚴蔚敏第6章二叉樹的五種基本形態(tài):二叉樹的五種基本形態(tài):N空樹空樹只含根結點只含根結點NNNLRR右子樹為空樹右子樹為空樹L左子樹為空樹左子樹為空樹左右子左右子樹均不樹均不為空樹為空樹數據結構嚴蔚敏第6章 二叉樹的主要基本操作二叉樹的主要基本操作:查查 找找 類類插插 入入 類類刪刪 除除 類類數據結構嚴蔚敏第6章 Root(T); Value(T, e); Parent(T, e); LeftChild(T, e); RightChild(T, e); LeftSibling(T, e); RightSibling(T, e); BiTreeEmpty(T); BiTreeDepth(T); PreOrderTraverse(T, Visit(); InOrderTraverse(T, Visit(); PostOrderTraverse(T, Visit(); LevelOrderTraverse(T, Visit();數據結構嚴蔚敏第6章 InitBiTree(&T); Assign(T, &e, value); CreateBiTree(&T, definition); InsertChild(T, p, LR, c);數據結構嚴蔚敏第6章ClearBiTree(&T); DestroyBiTree(&T);DeleteChild(T, p, LR);數據結構嚴蔚敏第6章二叉樹二叉樹的重要特性的重要特性數據結構嚴蔚敏第6章 性質性質 1 : 在二叉樹的第 i 層上至多有2i-1 個結點。 (i1)用歸納法證明用歸納法證明: 歸納基歸納基: 歸納假設:歸納假設: 歸納證明:歸納證明:i = 1 層時,只有一個根結點: 2i-1 = 20 = 1;假設對所有的 j,1 j i,命題成立;二叉樹上每個結點至多有兩棵子樹,則第 i 層的結點數 = 2i-2 2 = 2i-1 。數據結構嚴蔚敏第6章性質性質 2 : 深度為 k 的二叉樹上至多含 2k-1 個結點(k1)。證明:證明: 基于上一條性質,深度為 k 的二叉樹上的結點數至多為 20+21+ +2k-1 = 2k-1 。數據結構嚴蔚敏第6章 性質性質 3 : 對任何一棵二叉樹,若它含有n0 個葉子結點、n2 個度為 2 的結點,則必存在關系式:n0 = n2+1。證明:證明:設設 二叉樹上結點總數 n = n0 + n1 + n2又又 二叉樹上分支總數 b = n1+2n2 而 b = n-1 = n0 + n1 + n2 - 1由此,由此, n0 = n2 + 1 。數據結構嚴蔚敏第6章兩類兩類特殊特殊的二叉樹:的二叉樹:滿二叉樹滿二叉樹:指的是深度為k且含有2k-1個結點的二叉樹。完全二叉樹完全二叉樹:樹中所含的 n 個結點和滿二叉樹中編號編號為為 1 至至 n 的結點的結點一一對應。123456789 10 11 12 13 14 15abcdefghij數據結構嚴蔚敏第6章 性質性質 4 : 具有 n 個結點的完全二叉樹的深度深度為 log2n +1 。證明:證明:設設完全二叉樹的深度為 k 則根據第二條性質得 2k-1 n 2k 即 k-1 log2 n n,則該結點無左孩子, 否則,編號為 2i 的結點為其左孩子左孩子結點;(3) 若 2i+1n,則該結點無右孩子結點, 否則,編號為2i+1 的結點為其右孩子右孩子結點。數據結構嚴蔚敏第6章6.3 二叉樹的存儲結構二叉樹的存儲結構二、二叉樹的鏈式二、二叉樹的鏈式 存儲表示存儲表示一、一、 二叉樹的順序二叉樹的順序 存儲表示存儲表示數據結構嚴蔚敏第6章#define MAX_TREE_SIZE 100 / 二叉樹的最大結點數typedef TElemType SqBiTreeMAX_ TREE_SIZE; / 0號單元存儲根結點SqBiTree bt;一、一、 二叉樹的順序存儲表示二叉樹的順序存儲表示數據結構嚴蔚敏第6章例如例如:ABCDEF A B D C E F 0 1 2 3 4 5 6 7 8 9 10 11 12 131401326順序存儲結構僅適用于完全二叉樹!順序存儲結構僅適用于完全二叉樹!數據結構嚴蔚敏第6章二、二叉樹的鏈式存儲表示二、二叉樹的鏈式存儲表示1. 1. 二叉鏈表二叉鏈表2三叉鏈表三叉鏈表3 3雙親鏈表雙親鏈表4線索鏈表線索鏈表數據結構嚴蔚敏第6章ADEBCF rootlchild data rchild結點結構結點結構:1. 1. 二叉鏈表二叉鏈表數據結構嚴蔚敏第6章typedef struct BiTNode / 結點結構結點結構 TElemType data; struct BiTNode *lchild, *rchild; / 左右孩子指針 BiTNode, *BiTree;lchild data rchild結點結構結點結構:C 語言的類型描述如下語言的類型描述如下: :數據結構嚴蔚敏第6章ADEBCF root 2三叉鏈表三叉鏈表parent lchild data rchild結點結構結點結構:數據結構嚴蔚敏第6章 typedef struct TriTNode / 結點結構結點結構 TElemType data; struct TriTNode *lchild, *rchild; / 左右孩子指針 struct TriTNode *parent; /雙親指針 TriTNode, *TriTree;parent lchild data rchild結點結構結點結構:C 語言的類型描述如下語言的類型描述如下: :數據結構嚴蔚敏第6章0123456B2C0A -1D2E3F4 data parent結點結構結點結構:3 3雙親鏈表雙親鏈表LRTagLRRRL數據結構嚴蔚敏第6章 typedef struct BPTNode / 結點結構結點結構 TElemType data; int *parent; / 指向雙親的指針 char LRTag; / 左、右孩子標志域 BPTNode typedef struct BPTree / 樹結構樹結構 BPTNode nodesMAX_TREE_SIZE; int num_node; / 結點數目 int root; / 根結點的位置 BPTree數據結構嚴蔚敏第6章6.4二叉樹的遍歷二叉樹的遍歷數據結構嚴蔚敏第6章一、問題的提出一、問題的提出二、先左后右的遍歷算法二、先左后右的遍歷算法三、算法的遞歸描述三、算法的遞歸描述四、中序遍歷算法的非遞歸描述四、中序遍歷算法的非遞歸描述五五、遍歷算法的應用舉例遍歷算法的應用舉例數據結構嚴蔚敏第6章 順著某一條搜索路徑巡訪巡訪二叉樹中的結點,使得每個結點均被訪問一均被訪問一次次,而且僅被訪問一次僅被訪問一次。一、問題的提出一、問題的提出“訪問訪問”的含義可以很廣,如:輸出結點的信息等。數據結構嚴蔚敏第6章 “遍歷遍歷”是任何類型均有的操作,對線性結構而言,只有一條搜索路徑(因為每個結點均只有一個后繼),故不需要另加討論。而二叉樹是非線性結構, 每個結點有兩個后繼每個結點有兩個后繼,則存在如何遍歷存在如何遍歷即按什么樣的搜索搜索路徑路徑遍歷的問題。數據結構嚴蔚敏第6章 對對“二叉樹二叉樹”而言,可以有而言,可以有三條搜索路徑:三條搜索路徑: 1先上后下先上后下的按層次遍歷; 2先左先左(子樹)后右后右(子樹)的遍歷; 3先右先右(子樹)后左后左(子樹)的遍歷。數據結構嚴蔚敏第6章二、先左后右的遍歷算法二、先左后右的遍歷算法先先序(根)的遍歷算法中中序(根)的遍歷算法后后序(根)的遍歷算法數據結構嚴蔚敏第6章 若二叉樹為空樹,則空操作;否則,(1)訪問根結點;(2)先序遍歷左子樹;(3)先序遍歷右子樹。先序(根)的遍歷算法:先序(根)的遍歷算法:數據結構嚴蔚敏第6章 若二叉樹為空樹,則空操作;否則,(1)中序遍歷左子樹;(2)訪問根結點;(3)中序遍歷右子樹。中序(根)的遍歷算法:中序(根)的遍歷算法:數據結構嚴蔚敏第6章 若二叉樹為空樹,則空操作;否則,(1)后序遍歷左子樹;(2)后序遍歷右子樹;(3)訪問根結點。后序(根)的遍歷算法:后序(根)的遍歷算法:數據結構嚴蔚敏第6章課堂提問: 有以下結構的二叉樹有以下結構的二叉樹 寫出其先序、中序和后序遍歷的序列寫出其先序、中序和后序遍歷的序列ABCDE數據結構嚴蔚敏第6章三、算法的遞歸描述三、算法的遞歸描述void Preorder (BiTree T, void( *visit)(TElemType& e) / 先序遍歷二叉樹 if (T) visit(T-data); / 訪問結點 Preorder(T-lchild, visit); / 遍歷左子樹 Preorder(T-rchild, visit);/ 遍歷右子樹 數據結構嚴蔚敏第6章四、中序遍歷算法的非遞歸描述四、中序遍歷算法的非遞歸描述BiTNode *GoFarLeft(BiTree T, Stack *S) if (!T ) return NULL; while (T-lchild ) Push(S, T); T = T-lchild; return T; 數據結構嚴蔚敏第6章void Inorder_I(BiTree T, void (*visit) (TelemType& e) Stack *S; t = GoFarLeft(T, S); / 找到最左下的結點 while(t) visit(t-data); if (t-rchild) t = GoFarLeft(t-rchild, S); else if ( !StackEmpty(S ) / 棧不空時退棧 t = Pop(S); else t = NULL; / ??毡砻鞅闅v結束 / while/ Inorder_I 數據結構嚴蔚敏第6章五五、遍歷算法的應用舉例遍歷算法的應用舉例1、統計二叉樹中葉子結點的個數、統計二叉樹中葉子結點的個數 (先序遍歷先序遍歷)2、求二叉樹的深度、求二叉樹的深度(后序遍歷后序遍歷)3、復制二叉樹、復制二叉樹(后序遍歷后序遍歷)4 4、建立二叉樹的存儲結構、建立二叉樹的存儲結構數據結構嚴蔚敏第6章1、統計二叉樹中葉子結點的個數、統計二叉樹中葉子結點的個數算法基本思想算法基本思想: : 先序(或中序或后序)遍歷二叉樹,在遍歷過程中查找葉子結點,并計數。由此,需在遍歷算法中增添一個需在遍歷算法中增添一個“計數計數”的參數,的參數,并將算法中“訪問結點”的操作改為:若是葉子,則計數器增若是葉子,則計數器增1 1。數據結構嚴蔚敏第6章void CountLeaf (BiTree T, int& count) if ( T ) if (!T-lchild)& (!T-rchild) count+; / 對葉子結點計數 CountLeaf( T-lchild, count); CountLeaf( T-rchild, count); / if / CountLeaf數據結構嚴蔚敏第6章2、求二叉樹的深度、求二叉樹的深度(后序遍歷后序遍歷)算法基本思想算法基本思想: : 從二叉樹深度的定義可知,二叉樹的二叉樹的深度應為其左、右子樹深度的最大值加深度應為其左、右子樹深度的最大值加1 1。由此,需先分別求得左、右子樹的深度,需先分別求得左、右子樹的深度,算法中“訪問結點”的操作為:求得左、求得左、右子樹深度的最大值,然后加右子樹深度的最大值,然后加 1 1 。 首先分析二叉樹的深度二叉樹的深度和它的左左、右子右子樹深度樹深度之間的關系。數據結構嚴蔚敏第6章int Depth (BiTree T ) / 返回二叉樹的深度 if ( !T ) depthval = 0; else depthLeft = Depth( T-lchild ); depthRight= Depth( T-rchild ); depthval = 1 + (depthLeft depthRight ? depthLeft : depthRight); return depthval;數據結構嚴蔚敏第6章3、復制二叉樹、復制二叉樹其基本操作為:生成一個結點。其基本操作為:生成一個結點。根元素根元素T左子樹左子樹右子樹右子樹根元素根元素NEWT左子樹左子樹右子樹右子樹左子樹左子樹右子樹右子樹(后序遍歷后序遍歷)數據結構嚴蔚敏第6章BiTNode *GetTreeNode(TElemType item, BiTNode *lptr , BiTNode *rptr ) if (!(T = (BiTNode*)malloc(sizeof(BiTNode) exit(OVERFLOW); T- data = item; T- lchild = lptr; T- rchild = rptr; return T; 生成一個二叉樹的結點生成一個二叉樹的結點(其數據域為其數據域為item,左指針域為左指針域為lptr,右指針域為右指針域為rptr)數據結構嚴蔚敏第6章BiTNode *CopyTree(BiTNode *T) if (!T ) return NULL; if (T-lchild ) newlptr = CopyTree(T-lchild);/復制左子樹 else newlptr = NULL; if (T-rchild ) newrptr = CopyTree(T-rchild);/復制右子樹 else newrptr = NULL; newT = GetTreeNode(T-data, newlptr, newrptr); return newT; / CopyTree數據結構嚴蔚敏第6章ABCDEFGHK D C B H K G F E A例如:下列二叉樹例如:下列二叉樹的復制過程如下:的復制過程如下:newT數據結構嚴蔚敏第6章4 4、建立二叉樹的存儲、建立二叉樹的存儲結構結構不同的定義方法相應有不同的不同的定義方法相應有不同的存儲結構的建立算法存儲結構的建立算法數據結構嚴蔚敏第6章以字符串“A!”表示 以字符串的形式以字符串的形式 根根 左子樹左子樹 右子樹右子樹定義一棵二叉樹定義一棵二叉樹例如:ABCD以字符“!”表示A(B(! ,C(! , ! ),D(! , ! )空樹空樹只含一個根結點只含一個根結點的二叉樹的二叉樹A以下列字符串表示數據結構嚴蔚敏第6章Status CreateBiTree(BiTree &T) scanf(&ch); if (ch=!) T = NULL; else if (!(T = (BiTNode *)malloc(sizeof(BiTNode) exit(OVERFLOW); T-data = ch; / 生成根結點 CreateBiTree(T-lchild); / 構造左子樹 CreateBiTree(T-rchild); / 構造右子樹 return OK; / CreateBiTree數據結構嚴蔚敏第6章 僅知二叉樹的先序序列“abcdefg” 不能唯一確定一棵二叉樹,由二叉樹的先序和中序序列建樹由二叉樹的先序和中序序列建樹 如果同時已知二叉樹的中序序列“cbdaegf”,則會如何? 二叉樹的先序序列二叉樹的中序序列左子樹左子樹左子樹左子樹 右子樹右子樹右子樹右子樹根根根根數據結構嚴蔚敏第6章a b c d e f gc b d a e g f例如例如: :aab bccddeeffggabcdefg先序序列中序序列數據結構嚴蔚敏第6章void CrtBT(BiTree& T, char pre, char ino, int ps, int is, int n ) / 已知preps.ps+n-1為二叉樹的先序序列, / insis.is+n-1為二叉樹的中序序列,本算 / 法由此兩個序列構造二叉鏈表 if (n=0) T=NULL; else k=Search(ino, preps); / 在中序序列中查詢 if (k= -1) T=NULL; else / / CrtBT 數據結構嚴蔚敏第6章T=(BiTNode*)malloc(sizeof(BiTNode);T-data = preps;if (k=is) T-Lchild = NULL;else CrtBT(T-Lchild, pre, ino, ps+1, is, k-is );if (k=is+n-1) T-Rchild = NULL;else CrtBT(T-Rchild, pre, ino, ps+(k-is)+1, k+1, n-(k-is)-1 );數據結構嚴蔚敏第6章練習題:練習題: 1、編寫遞歸算法,將二叉樹中所有結點、編寫遞歸算法,將二叉樹中所有結點的左、右子樹交換。的左、右子樹交換。 2、編寫遞歸算法:對于二叉樹中每一個、編寫遞歸算法:對于二叉樹中每一個元素值為元素值為x的結點,刪除以它為根的子樹,的結點,刪除以它為根的子樹,并釋放相應的空間。并釋放相應的空間。 3、編寫按層次順序(同一層自左至右)、編寫按層次順序(同一層自左至右)遍歷二叉樹的算法。遍歷二叉樹的算法。數據結構嚴蔚敏第6章6.5線索二叉樹線索二叉樹 何謂線索二叉樹?何謂線索二叉樹? 線索鏈表的遍歷算法線索鏈表的遍歷算法 如何建立線索鏈表?如何建立線索鏈表?數據結構嚴蔚敏第6章一、一、何謂線索二叉樹?何謂線索二叉樹?遍歷二叉樹的結果是, 求得結點的一個線性序列。ABCDEFGHK例如:先序先序序列: A B C D E F G H K中序中序序列: B D C A H G K F E后序后序序列: D C B H K G F E A數據結構嚴蔚敏第6章指向該線性序列中的“前驅”和 “后繼” 的指針指針,稱作“線線索索”與其相應的二叉樹,稱作 “線索二叉樹線索二叉樹”包含 “線索” 的存儲結構,稱作 “線索鏈線索鏈表表”A B C D E F G H K D C B E 數據結構嚴蔚敏第6章對對線索鏈表線索鏈表中結點的約定:中結點的約定: 在二叉鏈表的結點中增加兩個標志域增加兩個標志域,并作如下規(guī)定:若該結點的左子樹不空,若該結點的左子樹不空,則Lchild域的指針指向其左子樹, 且左標志域的值為“指針 Link”; 否則,Lchild域的指針指向其“前驅”, 且左標志的值為“線索 Thread” 。數據結構嚴蔚敏第6章若該結點的右子樹不空,若該結點的右子樹不空,則rchild域的指針指向其右子樹, 且右標志域的值為 “指針 Link”;否則,rchild域的指針指向其“后繼”, 且右標志的值為“線索 Thread”。 如此定義的二叉樹的存儲結構稱作如此定義的二叉樹的存儲結構稱作“線索鏈表線索鏈表”。數據結構嚴蔚敏第6章typedef struct BiThrNod TElemType data; struct BiThrNode *lchild, *rchild; / 左右指針 PointerThr LTag, RTag; / 左右標志 BiThrNode, *BiThrTree;線索鏈表的類型描述: typedef enum Link, Thread PointerThr; / Link=0:指針,Thread=1:線索數據結構嚴蔚敏第6章二、線索鏈表的遍歷算法二、線索鏈表的遍歷算法: for ( p = firstNode(T); p; p = Succ(p) ) Visit (p);由于在線索鏈表中添加了遍歷中得到的“前驅”和“后繼”的信息,從而簡化了遍歷的算法。數據結構嚴蔚敏第6章例如例如: 對中序線索化鏈表的遍歷算法對中序線索化鏈表的遍歷算法 中序遍歷的第一個結點中序遍歷的第一個結點 ? 在中序線索化鏈表中結點的后繼在中序線索化鏈表中結點的后繼 ?左子樹上處于“最左下最左下”(沒有左子樹)的結點。若若無右子樹,則為則為后繼線索后繼線索所指結點;否則為否則為對其右子樹右子樹進行中序遍歷遍歷時訪問的第一個結點。第一個結點。數據結構嚴蔚敏第6章void InOrderTraverse_Thr(BiThrTree T, void (*Visit)(TElemType e) p = T-lchild; / p指向根結點 while (p != T) / 空樹或遍歷結束時,p=T while (p-LTag=Link) p = p-lchild; / 第一個結點 if ( !Visit( p-data ) ) return ERROR; while (p-RTag=Thread & p-rchild!=T) p = p-rchild; Visit(p-data); / 訪問后繼結點 p = p-rchild; / p進至其右子樹根 / InOrderTraverse_Thr數據結構嚴蔚敏第6章 在中序遍歷過程中修改結點的在中序遍歷過程中修改結點的左、右指針域,以保存當前訪問結左、右指針域,以保存當前訪問結點的點的“前驅前驅”和和“后繼后繼”信息。遍歷過信息。遍歷過程中,附設指針程中,附設指針pre, 并始終保持指并始終保持指針針pre指向當前訪問的、指針指向當前訪問的、指針p所指所指結點的前驅。結點的前驅。三、如何建立線索鏈表?三、如何建立線索鏈表?數據結構嚴蔚敏第6章void InThreading(BiThrTree p) if (p) / 對以p為根的非空二叉樹進行線索化 InThreading(p-lchild); / 左子樹線索化 if (!p-lchild) / 建前驅線索 p-LTag = Thread; p-lchild = pre; if (!pre-rchild) / 建后繼線索 pre-RTag = Thread; pre-rchild = p; pre = p; / 保持 pre 指向 p 的前驅 InThreading(p-rchild); / 右子樹線索化 / if / InThreading數據結構嚴蔚敏第6章Status InOrderThreading(BiThrTree &Thrt, BiThrTree T) / 構建中序線索鏈表 if (!(Thrt = (BiThrTree)malloc( sizeof( BiThrNode) exit (OVERFLOW); Thrt-LTag = Link; Thrt-RTag =Thread; Thrt-rchild = Thrt; / 添加頭結點 return OK; / InOrderThreading 數據結構嚴蔚敏第6章if (!T) Thrt-lchild = Thrt; else Thrt-lchild = T; pre = Thrt; InThreading(T); pre-rchild = Thrt; / 處理最后一個結點 pre-RTag = Thread; Thrt-rchild = pre; 數據結構嚴蔚敏第6章 6.6 樹和森林樹和森林 的表示方法的表示方法數據結構嚴蔚敏第6章6.6.1 樹的三種存儲結構樹的三種存儲結構一、一、雙親表示法雙親表示法二、二、孩子鏈表表示法孩子鏈表表示法三、三、樹的二叉鏈表樹的二叉鏈表( (孩子孩子- -兄弟)兄弟) 存儲表示法存儲表示法數據結構嚴蔚敏第6章ABCDEFG0 A -11 B 02 C 03 D 04 E 2 5 F 26 G 5r=0n=6data parent一、雙親表示法一、雙親表示法:數據結構嚴蔚敏第6章 typedef struct PTNode Elem data; int parent; / 雙親位置域 PTNode; data parent#define MAX_TREE_SIZE 100結點結構結點結構:C語言的類型描述語言的類型描述: :數據結構嚴蔚敏第6章typedef struct PTNode nodes MAX_TREE_SIZE; int r, n; / 根結點的位置和結點個數 PTree;樹結構樹結構:數據結構嚴蔚敏第6章ABCDEFG0 A -11 B 02 C 03 D 04 E 25 F 26 G 4r=0n=6 data firstchild 1 2 34 56二、孩子鏈表表示法二、孩子鏈表表示法:數據結構嚴蔚敏第6章typedef struct CTNode int child; struct CTNode *next; *ChildPtr;孩子結點結構孩子結點結構: child nextC語言的類型描述語言的類型描述: :數據結構嚴蔚敏第6章 typedef struct Elem data; ChildPtr firstchild; / 孩子鏈的頭指針 CTBox;雙親結點結構雙親結點結構 data firstchild數據結構嚴蔚敏第6章typedef struct CTBox nodesMAX_TREE_SIZE; int n, r; / 結點數和根結點的位置 CTree;樹結構樹結構:數據結構嚴蔚敏第6章ABCDEFG AB C E D F Groot AB C E D F G 三、樹的二叉鏈表三、樹的二叉鏈表 (孩子孩子-兄弟)存儲表示法兄弟)存儲表示法數據結構嚴蔚敏第6章typedef struct CSNode Elem data; struct CSNode *firstchild, *nextsibling; CSNode, *CSTree;C語言的類型描述語言的類型描述: :結點結構結點結構: firstchild data nextsibling數據結構嚴蔚敏第6章 6.6.2 森林和二叉樹的轉換森林和二叉樹的轉換設設森林森林 F = ( T1, T2, , Tn ); T1 = (root,t11, t12, , t1m);二叉樹二叉樹 B =( LBT, Node(root), RBT );數據結構嚴蔚敏第6章 由于二叉樹可以用二叉鏈表表示,為了使一般樹由于二叉樹可以用二叉鏈表表示,為了使一般樹也能用二叉鏈表表示,必須找出樹與二叉樹之間的關也能用二叉鏈表表示,必須找出樹與二叉樹之間的關系。系。 這樣,給定一棵樹,可以找到唯一的一棵二叉這樣,給定一棵樹,可以找到唯一的一棵二叉樹與之對應。樹與之對應。方法:方法: 對每個孩子進行從左到右的排序;對每個孩子進行從左到右的排序; 在兄弟之間加一條連線;在兄弟之間加一條連線; 對每個結點,除了左孩子外,去除其與其余孩對每個結點,除了左孩子外,去除其與其余孩子之間的聯系;子之間的聯系; 以根結點為軸心,將整個樹順時針轉以根結點為軸心,將整個樹順時針轉45度。度。1、將樹轉換成二叉樹、將樹轉換成二叉樹的轉換規(guī)則為:數據結構嚴蔚敏第6章 I A B C DE F G H(b) A B CD E G H FI(a)樹轉換為二叉樹樹轉換為二叉樹ABEFCDGHI(d)ABCDEFGHI(c)數據結構嚴蔚敏第6章2、由森林轉換成二叉樹、由森林轉換成二叉樹的轉換規(guī)則為:若 F = ,則 B = ;否則, 由 ROOT( T1 ) 對應得到 Node(root); 由 (t11, t12, , t1m ) 對應得到 LBT; 由 (T2, T3, Tn ) 對應得到 RBT。數據結構嚴蔚敏第6章森林轉換為二叉樹森林轉換為二叉樹ADCBEFHIGJEFADCBHIGJADCBEFHIGJADCBEFHIGJ數據結構嚴蔚敏第6章3、由二叉樹轉換為森林、由二叉樹轉換為森林的轉換規(guī)則為:若 B = , 則 F = ;否則,由 Node(root) 對應得到 ROOT( T1 );由LBT 對應得到 ( t11, t12, ,t1m);由RBT 對應得到 (T2, T3, , Tn)。數據結構嚴蔚敏第6章將二叉樹轉換成樹或森林的方法如下:將二叉樹轉換成樹或森林的方法如下:1.若某結點是其若某結點是其雙親的雙親的左孩子左孩子,則把該結點的右孩子、則把該結點的右孩子、右孩子的右孩子右孩子的右孩子都與該結點的都與該結點的雙親雙親結點用線連起結點用線連起來來;2.刪除原二叉樹中所有的雙親結點與右孩子結點的連刪除原二叉樹中所有的雙親結點與右孩子結點的連線線.3.整理步驟整理步驟1、2所得到的樹或森林所得到的樹或森林,使結構層次分明使結構層次分明.將二叉樹轉換為樹或森林的另一種描述:將二叉樹轉換為樹或森林的另一種描述:數據結構嚴蔚敏第6章ABEFCDGHI(a)ABEFCDGHI(b)將二叉樹轉換為樹或森林將二叉樹轉換為樹或森林ABEFCDGHI(c) 若某結點是其若某結點是其雙親雙親的的左孩子左孩子,則把該則把該結點的右孩子、右結點的右孩子、右孩子的右孩子孩子的右孩子都都與該結點的與該結點的雙親雙親結結點用線連起來點用線連起來;刪除原二叉樹中所刪除原二叉樹中所有的雙親結點與右有的雙親結點與右孩子結點的連線孩子結點的連線.數據結構嚴蔚敏第6章 由此,樹的各種操作均可對應二叉樹的操作來完成。 應當注意的是,應當注意的是,和樹對應的二叉樹,其左、右子樹的概念已改變?yōu)椋?左是孩子,右是兄弟。左是孩子,右是兄弟。數據結構嚴蔚敏第6章6.7樹和森林的遍歷樹和森林的遍歷數據結構嚴蔚敏第6章一、樹的遍歷一、樹的遍歷二、森林的遍歷二、森林的遍歷三、樹的遍歷的應用三、樹的遍歷的應用數據結構嚴蔚敏第6章樹的遍歷可有三條搜索路徑樹的遍歷可有三條搜索路徑:按層次遍歷按層次遍歷:先根先根(次序次序)遍歷遍歷:后根后根(次序次序)遍歷遍歷: 若樹不空,則先訪問根結點,然后若樹不空,則先訪問根結點,然后依次先根遍歷各棵子樹。依次先根遍歷各棵子樹。 若樹不空,則先依次后根遍歷各棵若樹不空,則先依次后根遍歷各棵子樹,然后訪問根結點。子樹,然后訪問根結點。 若樹不空,則自上而下自左至右若樹不空,則自上而下自左至右訪問樹中每個結點。訪問樹中每個結點。數據結構嚴蔚敏第6章 A B C DE F G H I J K 先根遍歷時頂點先根遍歷時頂點的訪問次序:的訪問次序:A B E F C D G H I J K 后根遍歷時頂點后根遍歷時頂點的訪問次序:的訪問次序:E F B C I J K H G D A 層次遍歷時頂點層次遍歷時頂點的訪問次序:的訪問次序:A B C D E F G H I J K數據結構嚴蔚敏第6章 B C DE F G H I J K1森林中第一棵樹的根結點;2森林中第一棵樹的子樹森林;3森林中其它樹構成的森林。森林由三部分構成:數據結構嚴蔚敏第6章 若森林不空,則訪問訪問森林中第一棵樹的根結點;先序遍歷先序遍歷森林中第一棵樹的子樹森林;先序遍歷先序遍歷森林中(除第一棵樹之外)其 余樹構成的森林。1. 先序遍歷先序遍歷森林的遍歷森林的遍歷即:依次從左至右依次從左至右對森林中的每一棵樹樹進行先根遍歷先根遍歷。數據結構嚴蔚敏第6章中序遍歷中序遍歷 若森林不空,則中序遍歷中序遍歷森林中第一棵樹的子樹森林;訪問訪問森林中第一棵樹的根結點;中序遍歷中序遍歷森林中(除第一棵樹之外)其 余樹構成的森林。即:依次從左至右依次從左至右對森林中的每一棵樹樹進行后根遍歷后根遍歷。數據結構嚴蔚敏第6章 樹的遍歷和二叉樹遍歷樹的遍歷和二叉樹遍歷的對應關系的對應關系 ?先根遍歷先根遍歷后根遍歷后根遍歷樹樹二叉樹二叉樹森林森林先序遍歷先序遍歷先序遍歷先序遍歷中序遍歷中序遍歷中序遍歷中序遍歷數據結構嚴蔚敏第6章設樹的存儲結構為孩子兄弟鏈表設樹的存儲結構為孩子兄弟鏈表typedef struct CSNode Elem data; struct CSNode *firstchild, *nextsibling; CSNode, *CSTree;一、求樹的深度一、求樹的深度二、輸出樹中所有從根到葉子的路徑二、輸出樹中所有從根到葉子的路徑三、建樹的存儲結構三、建樹的存儲結構數據結構嚴蔚敏第6章int TreeDepth(CSTree T) if(!T) return 0; else h1 = TreeDepth( T-firstchild ); h2 = TreeDepth( T-nextsibling); / TreeDepthreturn(max(h1+1, h2);一、求樹的深度的算法:一、求樹的深度的算法:數據結構嚴蔚敏第6章二、二、輸出樹中所有從根到葉子的路徑的算法輸出樹中所有從根到葉子的路徑的算法: A B C DE F G H I J K例如:對左圖所示的樹,其輸出結果應為:A B EA B FA CA D G H IA D G H JA D G H K數據結構嚴蔚敏第6章void AllPath( Bitree T, Stack& S ) if (T) Push( S, T-data ); if (!T-Lchild & !T-Rchild ) PrintStack(S); else AllPath( T-Lchild, S ); AllPath( T-Rchild, S ); Pop(S); / if(T) / AllPath/ 輸出二叉樹上從根到所有葉子結點的路徑輸出二叉樹上從根到所有葉子結點的路徑數據結構嚴蔚敏第6章void OutPath( Bitree T, Stack& S ) while ( !T ) Push(S, T-data ); if ( !T-firstchild ) Printstack(s); else OutPath( T-firstchild, s ); Pop(S); T = T-nextsibling; / while / OutPath/ 輸出森林中所有從根到葉的路徑數據結構嚴蔚敏第6章三、建樹的存儲結構的算法三、建樹的存儲結構的算法: 和二叉樹類似,不同的定義相應有不同的算法。 假設以二元組(F,C)的形式自上而自上而下下、自左而右自左而右依次輸入樹的各邊,建立樹的孩子孩子-兄弟鏈表兄弟鏈表。數據結構嚴蔚敏第6章ABCDEFG例如例如:對下列所示樹的輸入序列應為:(#, A)(A, B)(A, C)(A, D)(C, E)(C, F)(E, G)ABCD(#, A)(A, B)(A, C)(A, D)(C, E)可見,算法中需要一個隊列隊列保存已建好的結點的指針。指針。數據結構嚴蔚敏第6章void CreatTree( CSTree &T ) T = NULL; for( scanf(&fa, &ch); ch!= ; scanf(&fa, &ch);) p = GetTreeNode(ch); / 創(chuàng)建結點EnQueue(Q, p); / 指針入隊列if (fa = ) T = p; / 所建為根結點 else / 非根結點的情況 / for / CreateTree 數據結構嚴蔚敏第6章GetHead(Q,s); / 取隊列頭元素(指針值)while (s-data != fa ) / 查詢雙親結點 DeQueue(Q,s); GetHead(Q,s); if (!(s-firstchild) s-firstchild = p; r = p; / 鏈接第一個孩子結點else r-nextsibling = p; r = p; / 鏈接其它孩子結點 數據結構嚴蔚敏第6章6.8 哈哈 夫夫 曼曼 樹樹 與與 哈哈 夫夫 曼曼 編編 碼碼 最優(yōu)樹的定義最優(yōu)樹的定義 如何構造最優(yōu)樹如何構造最優(yōu)樹 前綴編碼前綴編碼 數據結構嚴蔚敏第6章 一、最優(yōu)樹的定義一、最優(yōu)樹的定義樹的路徑長度樹的路徑長度定義為: 樹中每個結點的路徑長度之和。 結點的路徑長度結點的路徑長度定義為: 從根結點到該結點的路徑上 分支的數目。數據結構嚴蔚敏第6章1 12 2453 367PL=0+1+1+2+2+2+2=10樹的路徑長度用樹的路徑長度用PLPL表示。表示。1 12 245C67PL=0+1+1+2+2+3+3=12數據結構嚴蔚敏第6章 樹的帶權路徑長度樹的帶權路徑長度定義為: 樹中所有葉子結點的帶權路徑長度結點的帶權路徑長度之和 WPL(T) = wklk (對所有葉子結點)。其中其中:Wk為樹中每個葉子結點的權; Lk為每個葉子結點到根的路徑長度。例如:例如:數據結構嚴蔚敏第6章27 9 75492WPL(T)= 72+52+23+43+92 =60WPL(T)= 74+94+53+42+21 =89 54數據結構嚴蔚敏第6章最優(yōu)樹最優(yōu)樹 在所有含 n 個葉子結點、并帶相同權值的 m 叉樹中,必存在一棵其帶權路徑長度取最小值帶權路徑長度取最小值的樹,稱為“最優(yōu)樹最優(yōu)樹”。數據結構嚴蔚敏第6章 由原始數據生成森林由原始數據生成森林 根據給定的n個權值 w1, w2, , wn, 構造 n 棵二叉樹的集合 F = T1, T2, , Tn, 其中每棵二叉樹中均只含一個帶權值 為 wi 的根結點,其左、右子樹為空樹;二、如何構造最優(yōu)樹二、如何構造最優(yōu)樹(1)(赫夫曼算法) 以二叉樹為例:數據結構嚴蔚敏第6章 在 F 中選取其根結點的權值為最 小的兩棵二叉樹,分別作為左、 右子樹構造一棵新的二叉樹,并 置這棵新的二叉樹根結點的權值 為其左、右子樹根結點的權值之 和;(2)數據結構嚴蔚敏第6章 從F中刪去這兩棵樹,同時加入 剛生成的新樹; 重復 (2) 和 (3) 兩步,直至 F 中只 含一棵樹為止。(3)(4)數據結構嚴蔚敏第6章675cd(b)11b57cd(c)18a711cdb5624(d)abcd7524(a)例:給定權值例:給定權值77,5 5,2 2,44,構造赫夫曼樹。構造赫夫曼樹。數據結構嚴蔚敏第6章9例例: : 已知權值已知權值 W= 5, 6, 2, 9, 7 ,構造赫夫曼樹。構造赫夫曼樹。562752769767139527數據結構嚴蔚敏第6章6713952795271667132900001111000110110111數據結構嚴蔚敏第6章三、哈夫曼樹的應用三、哈夫曼樹的應用1 1、判定樹、判定樹 在解決某些判定問題時,利用哈夫曼樹可以得在解決某些判定問題時,利用哈夫曼樹可以得到最佳判定算法。到最佳判定算法。例例1 將學生百分成績按分數段分級的程序。將學生百分成績按分數段分級的程序。若學生成績分布是均勻的,可用圖(若學生成績分布是均勻的,可用圖(a)二叉樹結構二叉樹結構來實現。來實現。 a60 a70 a80 a90 不及格不及格中等中等良好良好優(yōu)秀優(yōu)秀及格及格YNYNYNYN(a)輸入輸入10000個個數據,則需進數據,則需進行行31500次比次比較。較。數據結構嚴蔚敏第6章分數分數0596069707980899099比例比例0.050.150.40.30.10 70a 80 a60 及格及格中等中等良好良好 80a90 60a70 不及格不及格優(yōu)秀優(yōu)秀YNYYYNNN(b) 不及格不及格Y a90 a80 a70 a60 優(yōu)秀優(yōu)秀中等中等及格及格良好良好YNNN(c)YYY 學生成績分布不是均勻的情況:學生成績分布不是均勻的情況:以比例數為權構造一棵哈夫曼樹,以比例數為權構造一棵哈夫曼樹,如(如(b)判斷樹所示。判斷樹所示。再將每一比較框的兩次比較改為一再將每一比較框的兩次比較改為一次,可得到(次,可得到(c)判定樹。判定樹。輸入輸入10000個個數據,僅需進數據,僅需進行行22000次比次比較。較。數據結構嚴蔚敏第6章2 2、前綴編碼、前綴編碼 “前綴編碼”指的是,任何一個字符任何一個字符的編碼都不是同一字符集中另一個字符的編碼都不是同一字符集中另一個字符的編碼的前綴的編碼的前綴。數據結構嚴蔚敏第6章3 3、赫夫曼編碼、赫夫曼編碼 利用赫夫曼樹可以構造一種不等長的利用赫夫曼樹可以構造一種不等長的二進制編碼,并且構造所得的二進制編碼,并且構造所得的赫夫曼編碼赫夫曼編碼是一種是一種最優(yōu)前綴編碼最優(yōu)前綴編碼,即使所傳,即使所傳電文的總電文的總長度最短長度最短。數據結構嚴蔚敏第6章146833442200001111T;ACS各字符編碼是各字符編碼是 T ; A C S 00 01 10 110 111上述電文編碼:上述電文編碼:1110011000方法:方法:(1)用)用 2,4, 2,3, 3 作為葉子結點的權值生成一棵赫作為葉子結點的權值生成一棵赫夫曼樹,并將對應權值夫曼樹,并將對應權值wi的葉子結點注明對應的字符;的葉子結點注明對應的字符;(2)約定左分支表示字符)約定左分支表示字符“0”,右分支表示字符,右分支表示字符1(3)從葉子結點開始,順著雙親反推上去,直到根結點,路)從葉子結點開始,順著雙親反推上去,直到根結點,路徑上的徑上的0或或1連接的序列就是結點對應的字符的二進制連接的序列就是結點對應的字符的二進制編碼的編碼的逆序逆序。赫夫曼編碼赫夫曼編碼-利用赫夫曼樹構造通訊中電文編碼(前綴碼)利用赫夫曼樹構造通訊中電文編碼(前綴碼)例:例:要傳輸的電文是要傳輸的電文是CAS;CAT;SAT;AT要傳輸的字符集是要傳輸的字符集是 D=C,A,S,T, ;每個字符出現的頻率是每個字符出現的頻率是W= 2,4, 2,3, 3 注意:編碼的總長度恰好為赫夫曼樹的帶權路徑長。注意:編碼的總長度恰好為赫夫曼樹的帶權路徑長。數據結構嚴蔚敏第6章構造赫夫曼樹的算法構造赫夫曼樹的算法 為了實現構造赫夫曼樹的算法為了實現構造赫夫曼樹的算法,設計哈夫曼樹中每個設計哈夫曼樹中每個結點類型如下:結點類型如下: typedef struct char data;/*結點值結點值*/float weight;/*權重權重*/int parent;/*雙親結點雙親結點*/int lchild;/*左孩子結點左孩子結點*/int rchild;/*右孩子結點右孩子結點*/ HTNode,* HuffmanTree;

注意事項

本文(數據結構嚴蔚敏第6章課件)為本站會員(陽***)主動上傳,裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。 若此文所含內容侵犯了您的版權或隱私,請立即通知裝配圖網(點擊聯系客服),我們立即給予刪除!

溫馨提示:如果因為網速或其他原因下載失敗請重新下載,重復下載不扣分。




關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!