数据结构学习-(一)二叉树
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;
}
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;
}
相关文章推荐
- 数据结构学习笔记:二叉树
- 数据结构学习笔记 --- 二叉树
- 数据结构学习7——二叉树的遍历
- 数据结构学习之_二叉树的遍历
- 数据结构学习之二叉树(理论篇)
- 严蔚敏数据结构学习笔记六.树和二叉树
- 【C语言】【数据结构】菜鸟学习日志(四) 用二叉树实现非递归排序
- 【学习点滴-数据结构-二叉树】求二叉树中某两个节点的最近公共祖先
- 【学习点滴-数据结构-二叉树】整数序列放入二叉树中
- 数据结构学习之二叉树(理论篇)
- 数据结构(Java 二叉树模拟)本代码重在学习数据结构思路,代码完整性欠缺,请见谅
- 【学习点滴 -数据结构-二叉树】 二叉树的遍历(全)
- 【学习点滴-数据结构-二叉树】二叉树转换为其镜像。
- 数据结构学习6——二叉树的构造
- 【学习点滴-数据结构-二叉树】判断二叉树是否是平衡二叉树
- 数据结构与算法学习之二叉树的遍历:已知先序、中序、后序序列三者中的两种求另外一种遍历的算法
- 【学习点滴-数据结构-二叉树】二叉查找树转换成双链表
- 数据结构学习之二叉树
- 学习《数据结构》有感之新的创建二叉树和新的遍历的方法
- 数据结构学习之二叉树(实践篇)