有關二叉樹的簡單實現

2021-07-13 16:06:30 字數 2396 閱讀 5329

#include#include#includeusing namespace std;

templatestruct binarytreenode

t _data;

binarytreenode* _left;

binarytreenode* _right;

};templateclass binarytree

binarytree< t>(const t* a,size_t size)   

~binarytree< t>()     //析構函式

//binarytree& operator=(const binarytree& bt)   //賦值運算子過載

////              cout<<"binarytreeoperator=()"<& operator=(binarytree< t> bt )  //賦值運算子過載,利用swap()函式

void preorder()   //遞迴——前序遍歷(先根遍歷),順序:根,左,右

protected:

binarytreenode* _createtree(const t* a,size_t& index,size_t size)   //建立數(關鍵),注意所傳引數和內部邏輯

return root;

}void _preorder(binarytreenode * root)    //前序遍歷(遞迴)內部函式,順序:根,左,右

void _inorder(binarytreenode * root)    //中序遍歷(遞迴)的內部函式,順序:左,根,右

void _postorder(binarytreenode * root)    //後序遍歷(遞迴)的內部函式,順序:左,右,根

//void _levelorder(binarytreenode* root)     //層次遍歷的內部函式,順序:一層一層遍歷(不能用遞迴,要用佇列queue,先進先出)

////             }

//}void _levelorder(binarytreenode * root)       //層次遍歷的內部函式,順序:一層一層遍歷(不能用遞迴,要用佇列queue,先進先出)

}int _size(binarytreenode * root)          //二叉樹的節點個數

int _hight(binarytreenode * root)        //二叉樹的深度

int _leafnum(binarytreenode * root)         //二叉樹的葉子節點個數

void _clear(binarytreenode * root)     //析構的內部函式(等同於後序遍歷)

}binarytreenode* _copy(binarytreenode< t>* root )   //等同於前序遍歷

return newroot;

}void _preorder_non_r(binarytreenode * root)    //前序遍歷(非遞迴)內部函式,順序:根,左,右,利用棧stack

}void _inorder_non_r(binarytreenode * root)     //中序遍歷(非遞迴)的內部函式,順序:左,根,右

if(!s.empty())}}

void _postorder_non_r(binarytreenode * root)     //後序遍歷(非遞迴)的內部函式,順序:左,右,根

binarytreenode* top=s.top();

if(top->_right==null ||top->_right==prevvisited)

else

cur=top->_right;}}

binarytreenode* _find(binarytreenode< t>* root ,const t& x)    //遞迴查詢

protected:

binarytreenode* _root;

};void test()

;                 //binarytreet1;

binarytreet2(array,10);

//1, 2, 3, 4, 5, 6

//3, 2, 4, 1, 6, 5

//3, 4, 2, 6, 5, 1

//1, 2, 5, 3, 4, 6

//cout

//cout//t4=t2;

//cout<* ret=t2.find(4);

}int main()

層次遍歷思路:(不用遞迴,而是利用佇列的先進先出原則)

首先,訪問二叉樹根節點,並將其入隊

其次,當佇列不為空時,重複以下操作:

1.從佇列彈出乙個節點

2.將其左右節點壓入佇列

二叉樹 排序二叉樹的簡單實現

二叉樹 排序二叉樹 include using namespace std 二叉樹的節點 date 資料 left 指向二叉樹的左子樹 right 指向二叉樹的右子樹 template struct node template class btree public btree root null c...

二叉樹的簡單實現

本篇博文主要關注c 資料結構二叉樹的簡單實現,主要實現二叉樹類的構建,包括二叉樹的構造 拷貝構造 析構函式 賦值運算子的過載 前序中序後序層序遍歷二叉樹 查詢指定節點 查詢節點的總個數等功能函式,主要依靠遞迴演算法完成。樹的結點型別主要是根結點,指向右孩子的指標和指向左孩子的指標。下面是結點的建構函...

有關二叉樹的計算

1 第i層,至多2 i 1 個結點 2 深度為k,至多2 k 1個結點 3 任意一棵二叉樹,都滿足n0 n2 1 它的推導有利於做其它類似的計算題 結點數n n0 n1 n2 除了根結點n 1 0 n0 1 n1 2 n2 以上可推導出n0 n2 1。4 n個結點的二叉樹,其深度 log2 n 1 ...