欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

數(shù)據(jù)結(jié)構(gòu)之二叉樹(構(gòu)造拷貝構(gòu)造以及前序中序后續(xù)三種遍歷方法)-創(chuàng)新互聯(lián)

首先二叉樹的節(jié)點定義如下:
struct BinaryNode
{

                 BinaryNode *_left;
                 BinaryNode *_right;
                 T _data;
                BinaryNode( T data ) :_data(data), _left( NULL), _right(NULL )
                {};
};

二叉樹的結(jié)構(gòu)以及接口如下
template<class T>
class BinaryTree
{
                 typedef BinaryNode <T> Node;
public:
                BinaryTree() :_head( NULL)
                {};
                BinaryTree( const T * a, size_t size, const T & valiue)
                ~BinaryTree()
                BinaryTree( BinaryTree &b )
                void PrevOder()
                 void InOder()
                 void PostOder()
private:
public:
                 void LevalOder()
                 size_t depth()
                 size_t size()
                 size_t learsize()
                 void _LevalOder(BinaryNode <T> *root);
                 size_t _depth(BinaryNode <T> *root);
                 void _size(BinaryNode <T> *root, int *p);
                 void _leafsize(BinaryNode <T> *root, size_t *p);
                 int Leafsize(BinaryNode <T> *root);
                 void PrevOder_Nor();
                 void InOder_Nor();
                 void PostOder_Nor();
                 void Distory(Node *_root)
                 Node* _Copy(Node *cur);
private:
                 BinaryNode<T > *_root;
};


二叉樹的建立(構(gòu)造函數(shù))
                BinaryTree( const T * a, size_t size, const T & valiue)
                {
                                 size_t index = 0;
                                _root = _CreatTree( a, size , index, valiue);
                }
                 BinaryNode<T >* _CreatTree(const T* a, size_t size, size_t &index, const T &valiue)
                {
                                 BinaryNode<T > *root = NULL;
                                 if (index < size&& a[index ] != valiue)
                                {
                                                root = new BinaryNode <T>(a[index]);
                                                root->_left = _CreatTree(a, size , ++index, valiue);
                                                root->_right = _CreatTree(a, size , ++index, valiue);
                                }
                                 return root;
                }
二叉樹的銷毀(析構(gòu)函數(shù))
                ~BinaryTree()
                {
                                Distory(_root);
                                cout << " ~BinaryTree()" << endl;
                }
                 void Distory(Node *_root)
                {
                                 if (_root == NULL)
                                                 return;
                                Distory( _root->_left);
                                Distory( _root->_right);
                                 if (_root )
                                                 delete _root ;
                                 _root == NULL ;

                }
二叉樹的拷貝(拷貝構(gòu)造)
                BinaryTree( BinaryTree &b )
                {
                                _root = _Copy( b._root);
                }
BinaryNode<T >* BinaryTree< T>::_Copy(Node *cur)
{
                 if (cur == NULL)
                                 return NULL ;
                 Node *tmp = new Node(cur->_data);
                tmp->_left=_Copy( cur->_left);
                tmp->_right=_Copy( cur->_right);
                 return tmp;

}
求葉子節(jié)點個數(shù)(兩種方法)
一:
int BinaryTree <T>::Leafsize( BinaryNode<T > *root)
{
                 int count;
                 if (root == NULL)
                                count = 0;
                 else if (root->_left == NULL&&root ->_right == NULL)
                {
                                count = 1;
                }
                 else  count = Leafsize(root ->_left) + Leafsize(root->_right);
                 return count;
}
二:
void BinaryTree <T>::_leafsize( BinaryNode<T > *root, size_t * p)
{
                 if (root != NULL)
                {
                                _leafsize( root->_left,p );
                                _leafsize( root->_right,p );
                                 if (root ->_left == NULL&& root->_right == NULL )
                                {
                                                ++ *p;
                                }

                }
}

二叉樹前序遍歷遞歸
                 void _PrevOder(BinaryNode <T> * root)
                {
                                 if (root == NULL)
                                                 return;
                                cout << root->_data << " " ;
                                _PrevOder( root->_left);
                                _PrevOder( root->_right);
                }
二叉樹前序遍歷非遞歸
void BinaryTree <T>::PrevOder_Nor()
{
                 BinaryNode<T > *cur = _root;
                 stack<BinaryNode <T>*> s;
                 if (cur == NULL )
                                 return;
                s.push(cur);
                 while (!s.empty())
                {
                                 BinaryNode<T > *tmp = s.top();
                                cout << tmp->_data << " ";
                                s.pop();
                                 if (tmp->_right)
                                {
                                                s.push(tmp->_right);
                                }
                                 if (tmp->_left)
                                {
                                                s.push(tmp->_left);
                                }
                }
                cout << endl;
                
}
二叉樹層序遍歷(隊列實現(xiàn))
void BinaryTree <T>::_LevalOder( BinaryNode<T > *root)
{
                 deque<BinaryNode <T>*> q;
                q.push_back( root);
                 while (q.size())
                {
                                 BinaryNode<T > *pNode = q.front();
                                q.pop_front();
                                cout << pNode->_data << " ";
                                 if (pNode->_left)
                                {
                                                q.push_back(pNode->_left);
                                }
                                 if (pNode->_right)
                                {
                                                q.push_back(pNode->_right);
                                }
                }
                

}
二叉樹中序遍歷遞歸
                 void _InOder(BinaryNode <T> * root)
                {
                                 if (root == NULL)
                                                 return;
                                _InOder( root->_left);
                                cout << root->_data << " " ;
                                _InOder( root->_right);
                }
二叉樹中序遍歷非遞歸
void BinaryTree <T>::InOder_Nor()
{
                 if (_root == NULL )
                                 return;
                 Node *cur = _root;
                 stack<Node *> s;
                 while (cur||!s.empty())
                {
                                 while (cur)
                                {
                                                s.push(cur);
                                                cur = cur->_left;
                                }
                                 Node *tmp = s.top();
                                cout << tmp->_data << " ";
                                s.pop();
                                cur = tmp->_right;
                }
                cout << endl;

}
二叉樹后序遍歷遞歸
                 void  _PostOder(BinaryNode <T> * root)
                {
                                 if (root == NULL)
                                                 return;
                                _PostOder( root->_left);
                                _PostOder( root->_right);
                                cout << root->_data << " " ;
                }
二叉樹后序遍歷非遞歸
void BinaryTree <T>::PostOder_Nor()
{
                 if (_root == NULL )
                                 return;
                 Node *cur = _root;
                 stack<Node *> s;
                 Node *prev = NULL ;
                 while (cur||!s.empty())
                {
                                 while (cur)
                                {
                                                s.push(cur);
                                                cur = cur->_left;
                                }
                                 Node *tmp = s.top();
                                 if (tmp->_right == NULL || tmp->_right == prev)
                                {
                                                cout << tmp->_data << " " ;
                                                s.pop();
                                                prev = tmp;
                                }
                                 else
                                {
                                                cur = tmp->_right;
                                }
                }
                cout << endl;
                
}
二叉樹的深度
size_t BinaryTree <T>::_depth( BinaryNode<T > *root)
{
                 int hleft;
                 int hright;
                 int max;
                 if (root )
                {
                                hleft = _depth( root->_left);
                                hright = _depth( root->_right);
                                max = hleft > hright ? hleft : hright;
                                 return max + 1;

                }
                 else
                {
                                 return 0;
                }
}
二叉樹的大小
                 size_t size()
                {
                                 int count = 0;
                                _size(_root,&count);
                                 return count;
                }
void BinaryTree <T>::_size( BinaryNode<T > *root,int *p)
{
                 if (root )
                {
                                ++(* p);
                                _size( root->_left, p );
                                _size( root->_right, p );
                }
                 return ;
}

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。

創(chuàng)新互聯(lián)建站成立以來不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術(shù)為基點,以客戶需求中心、市場為導(dǎo)向”的快速反應(yīng)體系。對公司的主營項目,如中高端企業(yè)網(wǎng)站企劃 / 設(shè)計、行業(yè) / 企業(yè)門戶設(shè)計推廣、行業(yè)門戶平臺運營、成都App定制開發(fā)、成都做手機網(wǎng)站、微信網(wǎng)站制作、軟件開發(fā)、BGP機房服務(wù)器托管等實行標準化操作,讓客戶可以直觀的預(yù)知到從創(chuàng)新互聯(lián)建站可以獲得的服務(wù)效果。

當前題目:數(shù)據(jù)結(jié)構(gòu)之二叉樹(構(gòu)造拷貝構(gòu)造以及前序中序后續(xù)三種遍歷方法)-創(chuàng)新互聯(lián)
標題鏈接:http://aaarwkj.com/article34/dpgsse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、品牌網(wǎng)站制作網(wǎng)站設(shè)計、自適應(yīng)網(wǎng)站、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
亚洲欧美成人免费视频| 国产成人激情自拍视频在线观看| 中文字幕日产乱码一二三区| 国产av人妻精品一区二| 亚洲欧美中文日韩二区一区| 亚洲欧美综合精品二区| 91久久福利国产成人精品| 人妖系列中文字幕欧美系列| 欧美黄片在线免费观看视频| 91欧美精品午夜性色福利| 女同久久精品国产精品天堂99| 亚洲亚洲精品av在线动| 亚洲国产日本一区自拍| 91麻豆国产福利在线| 91桃色午夜福利视频| 婷婷色悠悠,色悠悠激情啪啪| 国产日韩精品国产二区| 欧美口爆吞精在线观看| 亚洲视频在线视频看视频在线| 在线亚洲av不卡一区二区三区| 日韩色欧美色国产精品| 久久久久精品国产亚洲av影院 | 欧美高清精品在线视频| 国产精品日韩经典中文字幕| 欧美日韩在线精品1区2区| 一区二区亚洲成人精品| 国产三级国产精品国产国在线观看 | 亚洲av成人在线观看| 欧美特黄大片在线观看| 成人激情在线免费电影| 欧美精品一区二区网站| 国内精品亚洲成av人片麻豆| 日韩毛片中文字幕在线观看 | 日本免费在线不卡一区二区| 日韩av在线高清播放| 亚洲午夜精品日韩乱码| 中文字幕日本精品人妻在线| 国产精品美女丝袜久久久| 亚洲欧美精品综合久久99| 国产美女极度色诱视频| 国产免费观看久久黄av片涩av|