資料結構之二叉樹的構建c 版

2021-07-24 07:35:17 字數 1980 閱讀 2574

二叉樹的構建要注意與鏈式表的區別,二叉樹這裡的構建十分低階,每個樹只是構建了乙個單一的二叉樹節點,總體來看是有下向上構建的。使用者需要手動去構建自己需要的樹,而不是直接去插入資料就到二叉樹中了,因為不是鏈式結構的單一,二叉樹十分豐富的。

提一下遍歷:

迭代的方式遍歷十分簡單。先序、中序、後序遍歷都只是針對根節點。比如中序,就是先遍歷左子樹-->根節點-->右子樹。(根節點在中間)

下面看**:

/*

1) 樹的基本概念:

度:說白了就是節點擁有的子分支數

葉子節點:說白了就是度為0的節點

雙親:說白了就是父親節點

層次:約定根節點為1,以後的子節點依次遞增

高度:說白了就是層次最大的數

2)二叉樹的型別

1>滿二叉樹:葉子必須位於最後一層,並且其他節點度為2

2>擴充二叉樹:除葉子節點外,其他節點度為2

1,擴充二叉樹的最大特點在於他的外路徑長度=內路徑的長度+2*非葉節點的數目

2,典型應用就是哈弗曼編碼

3>完全二叉樹: 只有最後兩層的節點的度能小於2,並且最後1層的葉子節點必須靠左邊。

1,將整個完全二叉樹依照從左到右,從上到下的進行0-->n進行編號,若子節點序號為i,則父節點為(i-1)/2。

2,典型的應用大小堆的實現。

4>其他型別二叉樹

3)森林與二叉樹的互轉

*/template struct btnode

};template class jbbinarytree

;template jbbinarytree::jbbinarytree()

templatejbbinarytree::~jbbinarytree()

templatevoid jbbinarytree::clear()

templatet jbbinarytree::getelement() const

return _root->element;

}templatebool jbbinarytree::isempty() const

templatevoid jbbinarytree::maketree(const t &x, jbbinarytree*left, jbbinarytree*right)

templatevoid jbbinarytree::breaktree(t &x, jbbinarytree*left, jbbinarytree*right)

x = _root->element;//將這個樹的根節點的元素域轉移走

left->_root = _root->_lchild;//將左子樹單獨拆成一棵樹

right->_root = _root->_rchild;//將右子樹單獨拆成一棵樹

delete _root;

clear();

}templatevoid jbbinarytree::preorder(btnode*t)

}templatevoid jbbinarytree::inorder(btnode*t)

}templatevoid jbbinarytree::postorder(btnode*t)

}

看主程式:

#include "stdafx.h"

#include"stdlib.h"

#include"jbqueue.h"

#include"jbstack.h"

#include"jbbinarytree.h"

int main()

system("pause");

return 0;

}

結果:

資料結構之二叉樹的構建C 版

二叉樹的構建要注意與鏈式表的區別,二叉樹這裡的構建十分低階,每個樹只是構建了乙個單一的二叉樹節點,總體來看是有下向上構建的。使用者需要手動去構建自己需要的樹,而不是直接去插入資料就到二叉樹中了,因為不是鏈式結構的單一,二叉樹十分豐富的。提一下遍歷 迭代的方式遍歷十分簡單。先序 中序 後序遍歷都只是針...

資料結構之二叉樹 C 二

目錄 table of contents 類的部分實現 二叉樹是一種特殊的樹,在上一節中也介紹了樹的其他形式,例如 霍夫曼樹,b樹等。其中,二叉樹的常用操作有 1.確定樹高 2.確定元素數目 3.複製 4.顯示或列印二叉樹 5.確定兩顆二叉樹是否一樣 6.刪除整顆樹 這些操作都可以通過有步驟的遍歷二...

資料結構之二叉樹

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