思路:
这道题的意思就是:按照层序来输出叶结点。因为是按照层序,所以遍历树中元素的方式就不同于树的同构了,因为遍历完左儿子1,不能遍历左儿子1的左儿子2,而是要遍历和左儿子1并列的右儿子1,这就需要我们记住左儿子1的父亲,才能找到右儿子1,这样用结构数组来编程太过繁琐,所以就想到了用deque容器来实现。deque容器可以在front 和back处插入数据,并可以删除front和back处的数据,太适合层序遍历了。
重点:
1.因为用户输入树的数据不是按着层序输入的,需要我们自行找到树的根结点。
2.容器deque中元素的插入和删除。d.push_back(); d.pop_front(); 从后面插入,从前面删除。
运行结果:
代码如下:
#include<iostream>
#include<deque>
using namespace std;
#define Max 10
#define Null -1
struct Tree
{
char Left;
char Right;
}T[Max];
int InputTree(struct Tree T[])
{
int N;
cin >> N;
//创建标记,用来找根结点
int check[Max];
for (int i = 0; i < N; i++)
{
check[i] = 0;
}
char left, right;
if (N != 0)
{