(1)初始化二叉链表;
(2)前序遍历二叉链表(递归实现);
(3)中序遍历二叉链表(递归实现);
(4)后序遍历二叉链表(递归实现);
(5)层序遍历二叉链表(队列实现);
(6)销毁二叉链表(递归实现)。
(7)复制二叉树
(8)求二叉树的深度
(9)求二叉树的结点数
参考书籍《数据结构》C语言版第2版 人民邮电出版社
前序输入二叉树:
#include <iostream>
#include<queue>
using namespace std;
typedef char TElemType;
//二叉树的二叉链表储存表示
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild, *rchild;//左右孩子指针
}BiTNode, *BiTree;
//(1)初始化二叉链表:理解扩展二叉树及其前序遍历序列;
void CreatBitree(BiTree &T)
{
TElemType ch;
cin >> ch;
//getchar();
if (ch == '#') T = NULL; //递归结束创建空树
else//创建二叉链表
{
T = new BiTNode;//根结点
T->data = ch;
CreatBitree(T->lchild);//递归创建左子树
CreatBitree(T->rchild);
}
}
//(2)前序遍历二叉链表(递归实现);
void PreOrderTraverse(BiTree T)
{
if (T)
{
cout << T->data;//访问根结点
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//(3)中序遍历二叉链表(递归实现);
void InOrderTraverse(BiTree T)
{
if (T)
{
InOrderTraverse(T->lchild);//中序遍历左子树
cout << T->data;//访问根结点
InOrderTraverse(T->rchild);//中序遍历右子树
}
}
//(4)后序遍历二叉链表(递归实现);
void PostOrderTraverse(BiTree T)
{
if (T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout << T->data;//访问根结点
}
}
//(5)层序遍历二叉链表;
void LevelOrderTraverse(BiTNode* T)
{
queue<BiTNode*>q;
q.push(T);
while (!q.empty())
{
cout << q.front()->data;
if (q.front()->lchild != NULL)q.push(q.front()->lchild);
if (q.front()->rchild != NULL)q.push(q.front()->rchild);
q.pop();
}
}
//(6)销毁二叉链表(递归实现)。
void DestroyTree(BiTree T)
{
if (T == NULL) return;
DestroyTree(T->lchild);
DestroyTree(T->rchild);
delete T;
}
//复制二叉树
void Copy(BiTree T, BiTree &NewT)
{
if (T == NULL)
{
NewT = NULL;
return;
}
else
{
NewT = new BiTNode[9];
NewT->data = T->data;
Copy(T->lchild, NewT->lchild);
Copy(T->rchild, NewT->rchild);
}
}
//二叉树的深度
int Depth(BiTree T)
{
int m, n;
if (T == NULL) return 0;
else
{
m = Depth(T->lchild);
n = Depth(T->rchild);
if (m > n) return(m + 1);
else return(n + 1);
}
}
//二叉树的结点数
int NodeCount(BiTree T)
{
if (T == NULL) return 0;
else return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
}
void main()
{
BiTree T;
cout << "创建二叉树: "<<endl;
CreatBitree(T);
cout << endl;
cout << "先序遍历: ";
PreOrderTraverse(T);
cout << endl;
cout << "中序遍历: ";
InOrderTraverse(T);
cout << endl;
cout << "后序遍历: ";
PostOrderTraverse(T);
cout << endl;
cout << "层序遍历: ";
LevelOrderTraverse(T);
cout << endl;
cout << "创建树的深度为:" << Depth(T) << endl;
cout << "创建树的总结点个数为:" << NodeCount(T) << endl;
DestroyTree(T);
system("pause");
}