資料結構之二叉樹的遞迴建立和遍歷

2021-07-11 15:16:38 字數 2050 閱讀 8219

這裡,得先明白樹的概念

摘自:維基百科

在電腦科學中,(英語:tree

)是一種抽象資料型別(adt)或是實作這種抽象資料型別的資料結構,用來模擬具樹狀結構性質的資料集合。它是由n(n>=1)個有限節點組成乙個具有層次關係的集合。把它叫做「樹」是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點:

二叉樹概念

摘自:維基百科

二叉樹(英語:binary tree

)是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。

二叉樹的每個節點至多只有二棵子樹(不存在度大於2的節點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有

一棵深度為k,且有滿二叉樹;深度為k,有n個節點的二叉樹,當且僅當其每乙個節點都與深度為k的滿二叉樹中,序號為1至n的節點對應時,稱之為完全二叉樹

與樹不同,樹的節點個數至少為1,而二叉樹的節點個數可以為0;樹中節點的最大度數沒有限制,而二叉樹節點的最大度數為2;樹的節點無左、右之分,而二叉樹的結點有左、右之分。

二叉樹的遍歷,分為:先序遍歷、中序遍歷、後序遍歷

,層次遍歷

------- 注意  ----- 

a、這裡的先序、中序、後序,既然說到順序,那麼肯定有個參考點,對吧。 二叉樹中的先序、中序、後序選擇的參考點是:根節點。選擇根為參考點,一定要記住。

b、先序、中序、後序中,無論哪種,一定要將樹從最上面的根節點分成左子樹和右子樹

, 然後再按照各自遍歷順序進行遍歷整棵樹。

先序:首先遍歷根節點,緊接著遍歷左子樹,然後才是右子樹。

中序:首先遍歷左子樹、緊接著遍歷根節點、最後遍歷右子樹。

後序:首先遍歷左子樹,緊接著遍歷右子樹、最後遍歷根節點。    

層次遍歷:從上到下、從左到右依次訪問每個結點。

這裡的遍歷:不包含層次遍歷

#include using namespace std;

/// 構建結點

struct bintreenode

;/// 構建二叉樹

bintreenode *create(bintreenode *t)

t = (bintreenode *)malloc(sizeof(bintreenode));

if (null == t)

t->index = input;

t->lchild = create(t->lchild);

t->rchild = create(t->rchild);

return t;

}/// 先序遍歷

void preorder(bintreenode *t)

}/// 中序遍歷

void inorder(bintreenode *t)

}/// 後序遍歷

void postorder(bintreenode *t)

}int main()

cout << "先序遍歷" << endl;

preorder(t);

cout << endl << "中序遍歷" << endl;

inorder(t);

cout << endl << "後序遍歷" << endl;

postorder(t);

cout << endl;

system("pause");

return 0;

}

5、測試結果:

資料結構和演算法 二叉樹建立和遞迴遍歷

完全二叉樹的建立以及遍歷 遞迴 include include 定義資料型別 typedef int datatype t 定義結構體 typedef struct nodebitree t 建立乙個二叉樹 n表示結點總數,i表示根結點 bitree t bitree create int n,da...

資料結構複習 鏈式二叉樹建立和遞迴遍歷

二叉鍊錶中,每個結點除了儲存本身的資料外,還應該設定兩個指標域left和right,它們分別指向左孩子和右孩子。當需要在二叉樹中經常尋找某結點的雙親,每個結點還可以加乙個指向雙親的指標域parent,這就是三叉鍊錶,下面的兩幅圖分別就是,二叉鍊錶和三叉鍊錶的資料結構 和 二叉樹的結構有一些性質來用於...

資料結構 二叉樹的遞迴與非遞迴建立和遍歷

下面 所用到的測試用例畫成樹的樣子長這樣 建立樹時給的是陣列,用 代表非法值,即該結點為空。二叉樹的遞迴實現 pragma once include includeusing namespace std templatestruct binarytreenode t value binarytree...