@【数据结构】(二叉树的定义及基本操作函数1)
采用线性表的形式存放一颗完全二叉树,实现二叉树的创建,输出二叉树的叶子结点,实现二叉树的层次遍历。
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
#define MAXNODE 1000
typedef char Elemtype;
typedef Elemtype SBiTree[MAXNODE];
void createtree(SBiTree &bt,int &n)
{
char str[MAXNODE];
int i = 1;
for (int m = 0; m < MAXNODE; m++)
bt[m] = '#'; // 创建一颗空树
cout << "请按层序输入二叉树节点的值,为空时输'#',结束输入‘!'使之成为一颗完全二叉树的形式:" << endl;
cin >> str[i];
while (str[i] != '!')
{
bt[i] = str[i];
i++;
cin >> str[i];
}
n = i; // 记录顺序表的长度
cout << "顺序表存储二叉树元素:" << endl;
for (int j = 1; j <n ; j++)
cout << bt[j] << " ";
cout << endl;
}
void leaf(SBiTree bt,int n)
{
cout << "叶子结点为:" << endl;
for (int i = 1; i < n; i++)
if (bt[2 * i] == '#'&&bt[2 * i + 1] == '#'&&bt[i]!='#')
cout << bt[i] << " ";
cout << endl;
}
void levelorder(SBiTree bt,int n)
{
int j = 1;
cout << "层次遍历完全二叉树" << endl;
for (int i = 1; i < n; i++)
{
cout << bt[i];
if (i == pow(2, j) - 1)
{
cout << endl; j++;
}
}
cout << endl;
}
void main()
{
SBiTree bt;
int n;
createtree(bt,n);
leaf(bt,n);
levelorder(bt,n);
system("pause");
}
二叉树:(F左边二叉树节点为空需要输入##,G右边#号可以省略)
测试: