二叉樹的定義與基本操作

2021-08-11 16:23:41 字數 2979 閱讀 5906

一、二叉樹的定義

把滿足以下兩個條件的樹形結構叫做

二叉樹(1)每個節點的度都步大於2;

(2)每個節點的孩子節點次序不能任意顛倒。

所以,乙個二叉樹的每個節點只能含有0、1或者2個孩子,而且每個孩子有左右之分,位於左邊的交左孩子,位於右邊的叫右孩子。

二、二叉樹的基本操作

#include#include#includeusing namespace std;

//孩子表示法

templatestruct bintreenode

};templateclass bintree

bintree(const t* array, size_t size, const t& invalid)

bintree(const bintree& bt)//拷貝建構函式

bintree& operator=(const bintree& bt)

return *this;

} ~bintree()

//前序遍歷

void preorder()

void preorder_nor1()

void preorder_nor2()

//中序遍歷

void midorder()

void midorder_nor()

//後序遍歷

void postorder()

void postorder_nor()

//層序遍歷

void levelorder()

//節點的個數

size_t size()

//求葉節點的個數

size_t leefsize()

//樹的高度

size_t height()

//查詢樹的某個節點

pnode find(const t&data)

//找節點的雙親

pnode parent(pnode node)

//找節點的左孩子

pnode lchild(pnode node)

//找節點的右孩子

pnode rchild(pnode node)

//樹的第k層有多少節點

size_t getkchild(size_t k)

private:

void createbintree(pnode& proot, const t* array,

size_t size, size_t& index, const t& invalid) }

pnode copybintree(pnode proot)

return pnewroot;

} void destroybintree(pnode proot) }

//前序遍歷(根+左子樹+右子樹)-->遞迴實現

void _preorder(pnode& proot) }

//前序遍歷-->非遞迴實現1

//將左右子樹都壓進棧中,先壓右棧,再壓左棧

void _preorder_nor1(pnode proot)

stacks;

pnode cur = proot;

s.push(cur);

while (!s.empty())

if (cur->_lchild&&cur->_lchild ->_data!= '#')

}} //前序遍歷-->非遞迴實現2

//只將左子樹壓進棧中

void _preorder_nor2(pnode proot)

}} //中序遍歷(左子樹+根+右子樹)--->遞迴實現

void _midorder(pnode& proot) }

//中序遍歷-->非遞迴實現

void _midorder_nor(pnode proot)

cur = s.top();

s.pop();

cout << cur->_data <

if (cur->_rchild)

else

}} //後序遍歷(左子樹+右子樹+根)-->遞迴實現

void _postorder(pnode& proot) }

//後序遍歷-->非遞迴實現

void _postorder_nor(pnode& proot)

if (s.empty())

return;

cur = s.top();

if (cur->_rchild != null&&cur->_rchild != ppre)

else

}} //層序遍歷

void _levelorder(pnode proot)

cout << endl;

} //節點的個數

size_t _size(pnode proot) }

//葉節點的個數

size_t _leefsize(pnode proot)

else

return _leefsize(proot->_lchild) + _leefsize(proot->_rchild);

} size_t _height(pnode proot)

pnode _find(pnode proot, const t&data)

pnode _parent(pnode proot, pnode node)

size_t _getkchild(pnode proot, size_t k)

private:

pnode _proot;//節點型別的指標

};void test()

int main()

實現結果截圖:

樹與二叉樹的基本操作

二叉樹的鏈式儲存結構 typedef int elemtype typedef struct bitnode bitnode,bitree 統計二叉樹中度為0的結點個數 intnodedegree 0 bitree bt else return0 統計二叉樹中度為1的結點個數 intnodedegr...

二叉樹基本操作

tree.h ifndef tree h define tree h include typedef int element 定義二叉樹 typedef struct nodetreenode void preorder treenode root 遞迴前序遍歷 void inorder treen...

二叉樹基本操作

一.二叉樹的定義 二.二叉樹的建立 定義一棵無資料的二叉樹 6 int left size 7 int right size 為了操作簡便,我們定義一棵不需要儲存資料的二叉樹,只要能儲存節點之間的邏輯關係就行,所以用兩個陣列來表示。left i 第i個節點的左子節點的序號 right i 第i個節點...