資料結構之二叉樹的簡單操作

2021-07-31 17:32:52 字數 1525 閱讀 8660

二叉樹是資料結構——樹的乙個重要結構,可以實現很多演算法,今天就來看一下二叉樹的基本實現。

#include #include #include #include using namespace std;

templatestruct binarytreenode

};

以上為引用的標頭檔案以及二叉樹節點物件及其建構函式

templateclass binarytree

void _prevorder()

void _prevordernorm()

void _levelorder()

size_t size()

size_t leafsize()

size_t getklevel(size_t k)

node* find(const t& x)

size_t depth()

protected: //這裡的函式才是真正演算法的實現

node* createtree(t* a, size_t n, const t& invalid, size_t& index) //運用遞迴建立乙個二叉樹

return root;

} void prevorder(node* root)// 先序遍歷遞迴演算法 }

void prevordernorm(node* root) //先序遍歷的非遞迴演算法

node* top = s.top();

s.pop();

//走到這,top(棧頂)節點的左子樹已經遍歷完畢,該訪問右子樹了

cur = top->_right;//訪問右子樹,又是先序遍歷的子問題

} cout << endl;

} void levelorder(node* root) //使用佇列先進先出的特點實現廣度優先遍歷

cout << endl;

} size_t _size(node* root)///獲取二叉樹節點個數

size_t _leafsize(node* root)

size_t _getklevel(size_t k, node* root)//k層節點的個數

node* _find(node* root, const t& x)//查詢值為x的節點

size_t _depth(node* root)//獲取深度 }

protected:

node* _root;

};

以上就是一些簡單的二叉樹操作,其中遍歷包括前序中序和後序,但是演算法都基本一致,在此不在贅述。其餘各演算法要領均已經在注釋中寫明。

以下為測試**:

void testbinarytree()

; binarytreet1(a,sizeof(a)/sizeof(a[0]),'#');

t1._prevorder();

t1._prevordernorm();

t1._levelorder();

cout<

資料結構之二叉樹

在二叉樹中每個節點最多只能有兩個子節點。即左子節點和有子節點。在二叉樹中最重要的操作應當是遍歷。即按照某一順序訪問二叉樹中的每乙個節點。一般有如下幾種遍歷方法 1 前序遍歷,即先訪問根幾點,然後再訪問左子節點,最後訪問右子節點。2 中序遍歷,即先訪問左子節點,然後再訪問根節點,最後訪問右子節點。3 ...

資料結構之二叉樹

定義 滿足以下條件的就是樹 1.有且僅有乙個特定的稱為根root的結點。2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是乙個棵樹,並稱為根的子樹。樹是資料結構中一種常見的資料結構,比如我們排序中常見的二叉樹,紅黑樹等。最常見的是樹形表示法和廣義表表示法。樹的結構示意...

資料結構之二叉樹

來看一下樹的結構 class treenode public treenode string value 首先,為了方便後面看到效果,先手動初始化乙個有4個節點的二叉樹 tree tree new tree treenode root new treenode root treenode node1...