数据结构树 —— 编程作业 02 :List Leaves
Posted 大彤小忆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构树 —— 编程作业 02 :List Leaves相关的知识,希望对你有一定的参考价值。
题目描述: 给定一棵树,按照从上到下、从左到右的顺序列出所有叶结点。
输入格式: 每个输入文件包含一个测试用例。
对于每种情况,第一行给出一个正整数N(
⩽
\\leqslant
⩽ 10),为树中的结点总数,结点编号从0到N-1。
接着是N行,每一行对应一个结点,并给出该结点的左、右子结点的索引。
如果子结点不存在,则在相应位置上给出“-”。
任何一对子结点都用一个空格隔开。
输出格式: 对于每个测试用例,在一行中按从上到下、从左到右的顺序打印所有的叶结点索引。
相邻数字之间必须有一个空格,行尾不能有多余的空格。
输入样例:
8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6
输出样例:
4 1 5
代码实现:
#include<iostream>
using namespace std;
#define MaxTree 10
#define Null -1
#include<queue>
#define Tree int
struct TreeNode {
Tree left; // 左子树的下标
Tree right; // 右子树的下标
}T[MaxTree];
// 建二叉树,返回根结点
Tree BuildTree(struct TreeNode T[])
{
int i, n;
int check[MaxTree]; //创建一个check数组来确定根节点,若在静态链表中未出现的下标则为根节点
char left, right;
Tree root = Null; //若n为0,返回Null
cin >> n;
if (n)
{
for (i = 0; i < n; i++)
{
check[i] = 0;
}
for (i = 0; i < n; i++)
{
cin >> left >> right;
if (left != '-')
{
T[i].left = left - '0'; //若输入不为'-',那字符减去字符0转换为整型数值
check[T[i].left] = 1; //把在静态链表中出现过的数值标记为1
}
else if (left == '-')
T[i].left = Null;
if (right != '-')
{
T[i].right = right - '0';
check[T[i].right] = 1;
}
else if (right == '-')
T[i].right = Null;
}
for (i = 0; i < n; i++)
{
if (!check[i])
break;
}
root = i;
}
return root;
}
//层序遍历,输出叶结点
void PrintLeava(int root)
{
if (root == Null) //如果根结点为空证明是空树
{
cout << "-1" << endl;
return;
}
queue<int>q;
q.push(root);
int i = 0;
int leave[MaxTree];
while (!q.empty())
{
int s = q.front();
q.pop();
if (T[s].left == Null && T[s].right == Null) //如果该结点既没有左孩子又没有右孩子就是叶子
{
leave[i++] = s;
}
else
{
if (T[s].left != Null)/*如果左孩子不为空就push左孩子*/
{
q.push(T[s].left);
}
if (T[s].right != Null) //如果右孩子不为空就push右孩子
{
q.push(T[s].right);
}
}
}
for (int j = 0; j < i; j++) //按顺序输出叶子
{
if (j < i - 1) //相邻数字之间必须有一个空格
{
cout << leave[j] << " ";
}
else //j=i-1为行尾不能有多余的空格
{
cout << leave[j];
}
}
}
int main()
{
Tree root = BuildTree(T);
PrintLeava(root);
system("pause");
return 0;
}
测试: 输入样例的测试效果如下图所示。
以上是关于数据结构树 —— 编程作业 02 :List Leaves的主要内容,如果未能解决你的问题,请参考以下文章
数据结构树 —— 编程作业 07 :Complete Binary Search Tree