二叉樹
在蕉嶺等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網站建設、成都網站建設 網站設計制作按需規(guī)劃網站,公司網站建設,企業(yè)網站建設,高端網站設計,全網營銷推廣,外貿網站制作,蕉嶺網站建設費用合理。
二叉樹:二叉樹是一棵特殊的樹,二叉樹每個節(jié)點最多有兩個孩子結點,分別稱為左孩子和右孩子
滿二叉樹:高度為N的滿二叉樹有2^N - 1個節(jié)點的二叉樹。
_leftChild);//遞歸訪問左子樹
_PrevOrder(root->_rightChild);//遞歸訪問右子樹
}
void _InOrder(Node* root)
{
//如果節(jié)點為空則直接返回
if (root == NULL)
{
return;
}
_InOrder(root->_leftChild);//訪問左子樹
cout << root->_data << " ";//遞歸訪問根節(jié)點
_InOrder(root->_rightChild);//遞歸訪問右子樹
}
void _PostOrder(Node* root)
{
//如果節(jié)點為空則直接返回
if (root == NULL)
{
return;
}
_PostOrder(root->_leftChild);//訪問左子樹
_PostOrder(root->_rightChild);//遞歸訪問右子樹
cout << root->_data << " ";//遞歸訪問根節(jié)點
}
//層次遍歷
void _LevelOrder(Node* root)
{
if (root == NULL)
{
return;
}
queue q;
q.push(root);//根節(jié)點入隊
while (!q.empty())//當隊列不為空
{
if (q.front()->_leftChild)
{
q.push(q.front()->_leftChild);
}
if (q.front()->_rightChild)
{
q.push(q.front()->_rightChild);
}
cout << q.front()->_data << " ";
q.pop();
}
}
size_t _Size(Node* root)
{
size_t count = 0;
if (root == NULL)
{
return count;//樹為空
}
count++;//根節(jié)點
count += _Size(root->_leftChild);//計算左子樹大小
count+= _Size(root->_rightChild);//計算右子樹大小
return count;
}
//返回左右子樹深度較大的
size_t _Depth(Node* root)
{
if (root == NULL)
{
return 0;
}
size_t LeftDepth = _Depth(root->_leftChild);
size_t RightDepth= _Depth(root->_rightChild);
if (LeftDepth > RightDepth)
{
return ++LeftDepth;
}
else
{
return ++RightDepth;
}
}
size_t _LeafSize(Node*root)
{
if (root == NULL)
{
return 0;
}
if (root->_leftChild == NULL && root->_rightChild == NULL)
{
return 1;
}
return _LeafSize(root->_leftChild)+ _LeafSize(root->_rightChild);
}
Node* _Copy(Node* root)
{
if (root == NULL)
{
return NULL;
}
Node* newRoot = new Node(root->_data);
newRoot->_leftChild = _Copy(root->_leftChild);
newRoot->_rightChild = _Copy(root->_rightChild);
return newRoot;
}
void _Destory(Node* root)
{
if (root == NULL)
{
return;
}
//刪除葉結點
if (root->_leftChild == NULL&&root->_rightChild == NULL)
{
delete root;
root = NULL;
return;
}
_Destory(root->_leftChild);//遞歸刪除左子樹
_Destory(root->_rightChild);//遞歸刪除右子樹
delete root;
}
private:
BinaryTreeNode* _root;//根節(jié)點
};測試代碼
#include"BinaryTree.h"
void TestBinary()
{
/*int a1[10] = { 1,2,3,'#','#',4,'#','#',5,6 };
BinaryTree t1(a1, 10, '#');
cout << "先序遍歷:";
t1.PrevOrder();
cout << "中序遍歷:";
t1.InOrder();
cout << "后序遍歷:";
t1.PostOrder();
cout << "層次遍歷:";
t1.LevelOrder();
cout << "size:" << t1.Size() << endl;
cout << "depth:" << t1.Depth() << endl;
cout << "leafSize:" << t1.LeafSize() << endl;*/
int a2[15] = { 1,2,'#',3,'#','#',4,5,'#',6 ,'#' ,7,'#' ,'#' ,8 };
int a[] = { 1,2,'#','#',3 };
BinaryTree t1(a, 5, '#');
BinaryTree t2;
t2 = t1;
cout << "先序遍歷:";
t2.PrevOrder();
cout << "中序遍歷:";
t2.InOrder();
cout << "后序遍歷:";
t2.PostOrder();
cout << "層次遍歷:";
t2.LevelOrder();
cout << "size:" << t2.Size() << endl;
cout << "depth:" << t2.Depth() << endl;
cout << "leafSize:" << t2.LeafSize() << endl;
}
int main()
{
TestBinary();
getchar();
return 0;
}
測試結果
http://weahome.cn/article/pjjhei.html