二叉樹,跪求答案

時間 2021-06-13 06:39:23

1樓:手機使用者

#includestdlib.h

在二叉樹中,已知中序後序序列求先序序列

對於這個問題,和《在二叉樹中,已知前序中序序列求後序序列》求解思路差不多,只是要對後序序列從後向前依次讀取字元,插入到二叉樹中,再判斷插入當前節點與讀入的字元在中序序列中的先後關係,若讀入字元先,則插入當前節點左子樹,否則,插入當前節點右子樹。

二叉樹百科名片

普通數轉化為二叉樹的過程二叉樹也是遞迴定義的,其結點有左右子樹之分,邏輯上二叉樹有五種基本形態: (1)空二叉樹——(a); (2)只有乙個根結點的二叉樹——(b); (3)右子樹為空的二叉樹——(c); (4)左子樹為空的二叉樹——(d); (5)完全二叉樹——(e)注意:儘管二叉樹與樹有許多相似之處,但二叉樹不是樹的特殊情形。

目錄簡介

樹的概述

樹的定義樹的表示

二叉樹1.二叉樹的基本形態2.兩個重要的概念3.二叉樹的性質4.二叉樹的儲存結構5.普通樹轉換成二叉樹

二叉樹遍歷

線索二叉樹簡介

樹的概述

樹的定義樹的表示

二叉樹1.二叉樹的基本形態2.兩個重要的概念3.二叉樹的性質4.二叉樹的儲存結構5.普通樹轉換成二叉樹

二叉樹遍歷

線索二叉樹

編輯本段簡介

二叉樹在圖論中是這樣定義的:二叉樹是乙個連通的無環圖,並且每乙個頂點的度不大於2。有根二叉樹還要滿足根結點的度不大於2。

有了根結點之後,每個頂點定義了唯一的父結點,和最多2個子結點。然而,沒有足夠的資訊來區分左結點和右結點。如果不考慮連通性,允許圖中有多個連通分量,這樣的結構叫做森林。

  在電腦科學中,二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用作二叉查詢樹和二叉堆。

二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2的 i 次方個結點;深度為k的二叉樹至多有2^(k) -1個結點;對任何一棵二叉樹t,如果其終端結點數(即葉子結點數)為n0,度為2的結點數為n2,則n0 = n2 + 1。   樹和二叉樹的2個主要差別:

  1. 樹中結點的最大度數沒有限制,而二叉樹結點的最大度數為2;   2. 樹的結點無左、右之分,而二叉樹的結點有左、右之分。

……   樹是一種重要的非線性資料結構,直觀地看,它是資料元素(在樹中稱為結點)按分支關係組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示。樹在計算機領域中也得到廣泛應用,如在編譯源程式時,可用樹表示源程式的語法結構。

又如在資料庫系統中,樹型結構也是資訊的重要組織形式之一。一切具有層次關係的問題都可用樹來描述。編輯本段樹的概述

樹結構的特點是:它的每乙個結點都可以有不止乙個直接後繼,除根結點外的所有結點都有且只有乙個直接前驅。以下具體地給出樹的定義及樹的資料結構表示。

樹的定義

樹是由乙個或多個結點組成的有限集合,其中:   ⒈必有乙個特定的稱為根(root)的結點;   ⒉剩下的結點被分成n>=0個互不相交的集合t1、t2、......tn,而且, 這些集合的每乙個又都是樹。

樹t1、t2、......tn被稱作根的子樹(subtree)。   樹的遞迴定義如下:

(1)至少有乙個結點(稱為根)(2)其它是互不相交的子樹   1.樹的度——也即是寬度,簡單地說,就是結點的分支數。以組成該樹各結點中最大的度作為該樹的度,如上圖的樹,其度為3;樹中度為零的結點稱為葉結點或終端結點。

樹中度不為零的結點稱為分枝結點或非終端結點。除根結點外的分枝結點統稱為內部結點。   2.

樹的深度——組成該樹各結點的最大層次,如上圖,其深度為3;   3.森林——指若干棵互不相交的樹的集合,如上圖,去掉根結點a,其原來的二棵子樹t1、t2、t3的集合就為森林;   4.有序樹——指樹中同層結點從左到右有次序排列,它們之間的次序不能互換,這樣的樹稱為有序樹,否則稱為無序樹。

樹的表示

樹的表示方法有許多,常用的方法是用括號:先將根結點放入一對圓括號中,然後把它的子樹由左至右的順序放入括號中,而對子樹也採用同樣的方法處理;同層子樹與它的根結點用圓括號括起來,同層子樹之間用逗號隔開,最後用閉括號括起來。如上圖可寫成如下形式:

  (a(b(e(k,l),f),c(g),d(h(m),i,j)))編輯本段二叉樹

1.二叉樹的基本形態

二叉樹也是遞迴定義的,其結點有左右子樹之分,邏輯上二叉樹有五種基本形態:   (1)空二叉樹——(a);

(2)只有乙個根結點的二叉樹——(b);   (3)只有左子樹——(c);   (4)只有右子樹——(d);   (5)完全二叉樹——(e)   注意:儘管二叉樹與樹有許多相似之處,但二叉樹不是樹的特殊情形。

2.兩個重要的概念

(1)完全二叉樹——若設二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層有葉子節點,這就是完全二叉樹。    (2)滿二叉樹——除了葉結點外每乙個結點都有左右子葉且葉結點都處在最底層的二叉樹,。

3.二叉樹的性質

(1) 在二叉樹中,第i層的結點總數不超過2^(i-1);   (2) 深度為h的二叉樹最多有(2^h)-1個結點(h>=1),最少有h個結點;   (3) 對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,   則n0=n2+1;   (4) 具有n個結點的完全二叉樹的深度為int(log2n)+1   (5)有n個結點的完全二叉樹各結點如果用順序方式儲存,則結點之間有如下關係:   若i為結點編號則 如果i<>1,則其父結點的編號為i/2;   如果2*i<=n,則其左兒子(即左子樹的根結點)的編號為2*i;若2*i>n,則無左兒子;   如果2*i+1<=n,則其右兒子的結點編號為2*i+1;若2*i+1>n,則無右兒子。   (6)給定n個節點,能構成h(n)種不同的二叉樹。

  h(n)為卡特蘭數的第n項。h(n)=c(n,2*n)/(n+1)。

4.二叉樹的儲存結構

(1)順序儲存方式   type node=record   data:datatype   l,r:integer;   end;   var tr:

array[1..n] of node;   (2)鍊表儲存方式,如:   type btree=^node;   node=record   data:

datatye;   lchild,rchild:btree;   end;

5.普通樹轉換成二叉樹

二叉樹很象一株倒懸著的樹,從樹根到大分枝、小分枝、直到葉子把資料聯絡起來,這種資料結構就叫做樹結構,簡稱樹。樹中每個分叉點稱為結點,起始結點稱為樹根,任意兩個結點間的連線關係稱為樹枝,結點下面不再有分枝稱為樹葉。結點的前趨結點稱為該結點的"雙親",結點的後趨結點稱為該結點的"子女"或"孩子",同一結點的"子女"之間互稱"兄弟"。

  普通樹轉二叉樹,一般採用左「子女」右「兄弟」的方式來轉化。   完全二叉樹   對滿二叉樹,從第一層的結點(即根)開始,由下而上,由左及右,按順序結點編號,便得到滿二叉樹的乙個順序表示。據此編號,完全二叉樹定義如下:

一棵具有n個結點,深度為k的二叉樹,當且僅當所有結點對應於深度為k的滿二叉樹中編號由1至n的那些結點時,該二叉樹便是完全二叉樹。圖4是一棵完全二叉樹。編輯本段二叉樹遍歷

遍歷是對樹的一種最基本的運算,所謂遍歷二叉樹,就是按一定的規則和順序走遍二叉樹的所有結點,使每乙個結點都被訪問一次,而且只被訪問一次。由於二叉樹是非線性結構,因此,樹的遍歷實質上是將二叉樹的各個結點轉換成為乙個線性序列來表示。   設l、d、r分別表示遍歷左子樹、訪問根結點和遍歷右子樹, 則對一棵二叉樹的遍歷有三種情況:

dlr(稱為先根次序遍歷),ldr(稱為中根次序遍歷),lrd (稱為後根次序遍歷)。   (1)前序遍歷   訪問根;按前序遍歷左子樹;按前序遍歷右子樹   (2)中序遍歷   按中序遍歷左子樹;訪問根;按中序遍歷右子樹   (3)後序遍歷   按後序遍歷左子樹;按後序遍歷右子樹;訪問根   (4)層次遍歷   即按照層次訪問,通常用佇列來做。訪問根,訪問子女,再訪問子女的子女(越往後的層次越低)(兩個子女的級別相同)   特殊的二叉樹   1.

完全二叉樹   complete binary tree    若設二叉樹的高度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層從右向左連續缺若干結點,這就是完全二叉樹。   2. 滿二叉樹   full binary tree:

  乙個高度為h的二叉樹包含正是2-1元素稱為滿二叉樹。編輯本段線索二叉樹

線索二叉樹(保留遍歷時結點在任一串行的前驅和後繼的資訊):若結點有左子樹,則其lchild域指示其左孩子,否則令lchild域指示其前驅;若結點有右子樹,則其rchild域指示其右孩子,否則令rchild指示其後繼。還需在結點結構中增加兩個標誌域ltag和rtag。

ltag=0時,lchild域指示結點的左孩子,ltag=1時,lchild域指示結點的前驅;rtag=0時,rchild域指示結點的右孩子,rtag=1時,rchild域指示結點的後繼。以這種結點結構構成的二叉鍊表作為二叉樹的儲存結構,叫做線索鍊表,其中指向結點前驅和後繼的指標叫做線索,加上線索的二叉樹稱為線索二叉樹。對二叉樹以某種次序遍歷使其變為線索二叉樹的過程叫做線索化。

若對二叉樹進行中序遍歷,則所得的線索二叉樹稱為中序線索二叉樹,線索鍊表稱為為中序線索鍊表。線索二叉樹是一種物理結構。

線索二叉樹的儲存結構

在中序線索樹找結點後繼的規律是:若其右標誌為1,則右鏈為線索,指示其後繼,否則遍歷其右子樹時訪問的第乙個結點(右子樹最左下的結點)為其後繼;找結點前驅的規律是:若其左標誌為1,則左鏈為線索,指示其前驅,否則遍歷左子樹時最後訪問的乙個結點(左子樹中最右下的結點)為其前驅。

  在後序線索樹中找到結點的後繼分三種情況:   若結點是二叉樹的根,則其後繼為空;若結點是其雙親的右孩子,或是其雙親的左孩子且其雙親沒有右子樹,則其後繼即為雙親結點;若結點是其雙親的左孩子,且其雙親有右子樹,則其後繼為雙親右子樹上按後序遍歷列出的第乙個結點。   資料結構定義為:

  /* 二叉線索儲存表示*/   typedefenumpointertag;/* link(0):指標,thread(1):線索 */   typedefstruct bithrnode   bithrnode,*bithrtree;

二叉樹,跪求答案

在二叉樹中,已知中序後序序列求先序序列

對於這個問題,和《在二叉樹中,已知前序中序序列求後序序列》求解思路差不多,只是要對後序序列從後向前依次讀取字元,插入到二叉樹中,再判斷插入當前節點與讀入的字元在中序序列中的先後關係,若讀入字元先,則插入當前節點左子樹,否則,插入當前節點右子樹。

二叉樹,跪求答案

在二叉樹中,已知中序後序序列求先序序列

對於這個問題,和《在二叉樹中,已知前序中序序列求後序序列》求解思路差不多,只是要對後序序列從後向前依次讀取字元,插入到二叉樹中,再判斷插入當前節點與讀入的字元在中序序列中的先後關係,若讀入字元先,則插入當前節點左子樹,否則,插入當前節點右子樹。

二叉樹,跪求答案

在二叉樹中,已知中序後序序列求先序序列

對於這個問題,和《在二叉樹中,已知前序中序序列求後序序列》求解思路差不多,只是要對後序序列從後向前依次讀取字元,插入到二叉樹中,再判斷插入當前節點與讀入的字元在中序序列中的先後關係,若讀入字元先,則插入當前節點左子樹,否則,插入當前節點右子樹。

二叉樹,跪求答案

在二叉樹中,已知中序後序序列求先序序列

對於這個問題,和《在二叉樹中,已知前序中序序列求後序序列》求解思路差不多,只是要對後序序列從後向前依次讀取字元,插入到二叉樹中,再判斷插入當前節點與讀入的字元在中序序列中的先後關係,若讀入字元先,則插入當前節點左子樹,否則,插入當前節點右子樹。

二叉樹,跪求答案

在二叉樹中,已知中序後序序列求先序序列

對於這個問題,和《在二叉樹中,已知前序中序序列求後序序列》求解思路差不多,只是要對後序序列從後向前依次讀取字元,插入到二叉樹中,再判斷插入當前節點與讀入的字元在中序序列中的先後關係,若讀入字元先,則插入當前節點左子樹,否則,插入當前節點右子樹。

二叉樹,跪求答案

在二叉樹中,已知中序後序序列求先序序列

對於這個問題,和《在二叉樹中,已知前序中序序列求後序序列》求解思路差不多,只是要對後序序列從後向前依次讀取字元,插入到二叉樹中,再判斷插入當前節點與讀入的字元在中序序列中的先後關係,若讀入字元先,則插入當前節點左子樹,否則,插入當前節點右子樹。

二叉樹,跪求答案

在二叉樹中,已知中序後序序列求先序序列

對於這個問題,和《在二叉樹中,已知前序中序序列求後序序列》求解思路差不多,只是要對後序序列從後向前依次讀取字元,插入到二叉樹中,再判斷插入當前節點與讀入的字元在中序序列中的先後關係,若讀入字元先,則插入當前節點左子樹,否則,插入當前節點右子樹。

二叉樹,跪求答案

在二叉樹中,已知中序後序序列求先序序列

對於這個問題,和《在二叉樹中,已知前序中序序列求後序序列》求解思路差不多,只是要對後序序列從後向前依次讀取字元,插入到二叉樹中,再判斷插入當前節點與讀入的字元在中序序列中的先後關係,若讀入字元先,則插入當前節點左子樹,否則,插入當前節點右子樹。

我的**如下:

#includestdlib.h

什麼是二叉樹,舉二叉樹的例子,什麼是二叉樹,舉一個二叉樹的例子

二叉樹樹是一種重要的非線性資料結構,直觀地看,它是資料元素 在樹中稱為結點 按分支關係組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示。樹在計算機領域中也得到廣泛應用,如在編譯源程式如下時,可用樹表示源源程式如下的語法結構。又如在資...

r語言如何二叉樹,如何構建二叉樹

define telemtype inttypedef struct bitnodebitnode,bitree 先序建立二叉樹 void createbitree bitree t t data c createbitree t lchild createbitree t rchild 先序遞迴建...

二叉樹的對稱序列是什麼,已知二叉樹的前序序列,對稱序列怎麼求後序序列

就是中序,先訪問左子樹,後訪問父節點,最後訪問右子樹。 這個對稱序列應該就是中序遍歷的序列了 已知二叉樹的前序序列,對稱序列怎麼求後序序列 利平凡 第一步,root最簡單,前序遍歷的第一節點g就是root。第二步,繼續觀察前序遍歷gdafemhz,除了知道g是root,剩下的節點必然是root的左右...