您的位置:首页 > 理论基础 > 数据结构算法

数据结构学习-(一)二叉树

2017-04-15 22:42 120 查看
二叉树基本代码:

BinTreeClass.h文件

#include<iostream>
using namespace std;

class Node
{
friend class BinTree;
public:
Node():lchild(0), rchild(0){}
Node(int val, Node *lptr=0, Node *rptr=0)
{
data = val;
lchild = lptr;
rchild = rptr;
}
int Getdata(){return data;}
Node *Left(){return lchild;}
Node *Right(){return rchild;}
private:
Node *lchild, *rchild;
int data;
};

class BinTree//二叉排序树
{
public:
BinTree():root(0){}
~BinTree(){ Destroy(root);}
void insertNode(int val)
{
insertNode(root, val);
}
void PreOrder(){PreOrder(root);}
void InOrder(){InOrder(root);}
void PostOrder(){PostOrder(root);}
int Depth(){return Depth(root);}
int Size(){return Size(root);}
int LeafCount(){return LeafCount(root);}
private:
Node *root;
void insertNode(Node *&t, int val);//插入节点
void PreOrder(Node *t);//前序遍历
void InOrder(Node *t);//中序遍历
void PostOrder(Node *t);//后序遍历
void Destroy(Node *t);//销毁
int Depth(Node *t);//树的深度
int Size(Node *t);//树的节点数
int LeafCount(Node *t);//树的叶节点数
};

void BinTree::insertNode(Node *&t, int val)
{
if(t==0)
t = new Node(val);
else if(val < t->data)
insertNode(t->lchild, val);
else
insertNode(t->rchild, val);
}

void BinTree::PreOrder(Node *t)
{
if(t != 0)
{
cout << t->data << ' ';
PreOrder(t->lchild);
PreOrder(t->rchild);
}
}

void BinTree::InOrder(Node *t)
{
if(t != 0)
{
InOrder(t->lchild);
cout << t->data << ' ';
InOrder(t->rchild);
}
}

void BinTree::PostOrder(Node *t)
{
if(t != 0)
{
PostOrder(t->lchild);
PostOrder(t->rchild);
cout << t->data << ' ';
}
}

void BinTree::Destroy(Node *t)
{
if(t != 0)
{
Destroy(t->lchild);
Destroy(t->rchild);
delete t;
}
}

int BinTree::Depth(Node *t)
{
if(t==0)
return -1;
int dl=Depth(t->lchild);
int dr=Depth(t->rchild);
return 1 + (dl > dr ? dl : dr);
}

int BinTree::Size(Node *t)
{
if(t==0)
return 0;
return 1+Size(t->lchild)+Size(t->rchild);
}

int BinTree::LeafCount(Node *t)
{
if(t==0)
return 0;
if(t->lchild == NULL && t->rchild == NULL)
return 1;
else
return LeafCount(t->lchild)+LeafCount(t->rchild);
}
Test.cpp文件
#include "BinTreeClass.h"

void main()
{
BinTree BTree;
int x;
cout << "请输入10个整数:\n";
for(int i=0; i<10; i++)
{
cin >> x;
BTree.insertNode(x);
}

cout << "先序遍历序列:\n";
BTree.PreOrder();
cout << "\n中序遍历序列:\n";
BTree.InOrder();
cout << "\n后序遍历序列:\n";
BTree.PostOrder();
cout << "\n二叉树的深度:\n";
cout << BTree.Depth() << endl;
cout << "\n二叉树的节点个数:\n";
cout << BTree.Size() << endl;
cout << "\n二叉树的叶节点个数:\n";
cout << BTree.LeafCount() << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: