一、二叉樹的定義
把滿足以下兩個條件的樹形結構叫做
二叉樹(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個節點...