樹的遍歷 先序遍歷 中序遍歷 後序遍歷

2021-07-24 19:52:27 字數 2867 閱讀 4802

名詞解釋

(1)每個元素稱為節點

(2)有乙個特定的節點被稱為根節點或樹根

(3)除根節點外的其餘資料元素被分為m個互不相交的集合t1,t2,t3.....tm-1,其中每乙個集合ti本身也是乙個樹,被稱作原樹的子樹

節點的度:乙個節點含有子樹的個數稱為該節點的度

葉節點或終端節點:度為0的節點稱為葉節點

非終端節點或分支節點:度不為0的節點

雙親結點或父節點:若乙個節點含有子節點,則這個節點稱為其子節點的乙個父節點

孩子節點或子節點:乙個節點含有的子樹的根節點稱為該節點的子節點

兄弟節點:具有相同父節點的節點互稱為兄弟節點

樹的度:一棵樹中,最大的節點的度稱為樹的度

節點的層次:從根開始定義起,根為第一層,根的子節點為第二層,以此類推

樹的高度或深度:樹中節點的最大層次

森林:由m顆互不相交的樹的集合稱為森林

二叉樹:二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2的 i -1次方個結點;深度為k的二叉樹至多有2^(k) -1個結點;對任何一棵二叉樹t,如果其終端結點數(即葉子結點數)為n0,度為2的結點數為n2,則n0 = n2 + 1。

二叉樹的鏈式儲存結構:

名詞解釋

(1)每個元素稱為節點

(2)有乙個特定的節點被稱為根節點或樹根

(3)除根節點外的其餘資料元素被分為m個互不相交的集合t1,t2,t3.....tm-1,其中每乙個集合ti本身也是乙個樹,被稱作原樹的子樹

節點的度:乙個節點含有子樹的個數稱為該節點的度

葉節點或終端節點:度為0的節點稱為葉節點

非終端節點或分支節點:度不為0的節點

雙親結點或父節點:若乙個節點含有子節點,則這個節點稱為其子節點的乙個父節點

孩子節點或子節點:乙個節點含有的子樹的根節點稱為該節點的子節點

兄弟節點:具有相同父節點的節點互稱為兄弟節點

樹的度:一棵樹中,最大的節點的度稱為樹的度

節點的層次:從根開始定義起,根為第一層,根的子節點為第二層,以此類推

樹的高度或深度:樹中節點的最大層次

森林:由m顆互不相交的樹的集合稱為森林

二叉樹:二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2的 i -1次方個結點;深度為k的二叉樹至多有2^(k) -1個結點;對任何一棵二叉樹t,如果其終端結點數(即葉子結點數)為n0,度為2的結點數為n2,則n0 = n2 + 1。

二叉樹的鏈式儲存結構:

typedef struct bitnodebitnode, *bitree;
二叉樹的先序建立(遞迴):

void createbitree(bitree &t)

else

輸出:

void visit(bitree &t)

}

先序遍歷:

首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左、右子樹時,仍然先訪問根結點,

然後遍歷左子樹,最後遍歷右子樹,如果二叉樹為空則返回。

例如,下圖所示二叉樹的遍歷結果是:abdecf

void preorder(bitree &t) 

}

中序遍歷:

中序遍歷首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。在遍歷左、右子樹時,仍然先遍歷左子樹,再訪問根結點,最後遍歷右子樹。

如右圖所示

二叉樹中序遍歷結果:dbeafc

void inorder(bitree &t)

}

後序遍歷:

後序遍歷先遍歷左子樹,然後遍歷右子樹,最後訪問根節點,在遍歷左子樹、右子樹時,仍然先遍歷左子樹,然後遍歷右子樹,最後訪問根節點

如右圖所示

二叉樹中序遍歷結果:debfca

void postorder(bitree t)

}

樹 先序中序後序遍歷

題目分析 題目描述 description 求一棵二叉樹的前序遍歷,中序遍歷和後序遍歷 輸入描述 input description 第一行乙個整數n,表示這棵樹的節點個數。接下來n行每行2個整數l和r。第i行的兩個整數li和ri代表編號為i的節點的左兒子編號和右兒子編號。輸出描述 output d...

二叉樹先序遍歷 中序遍歷 後序遍歷

輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。非建二叉樹版本 include includeusing namespace std string preord,inord void rebuild int preleft,int preright,int inleft,int ...

二叉樹先序遍歷 後序遍歷 中序遍歷

從根部 a 開始,然後開始遍歷左子樹,直接找到 b 檢視 b 有沒有左子樹,有 d,再檢視 d 有沒有子樹,沒有,d 已經是葉子,所以第二個是 d。倒回去,取中 b,第三個數是 b。檢視 b 有沒有右子樹,有 e 檢視 e 有沒有子樹,有 g 左 h 右 所有後面三個數是 egh 先查左子樹,存在繼...