携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情
题目描述:
以二叉链表作存储结构,建立一棵二叉树, 输出该二叉树的先序遍历序列。
二叉链表的类型描述:
typedef char ElemType;
typedef struct BiNode
{ ElemType data;
struct BiNode *lchild,*rchild;
}BiNode,*BiTree;
输入格式:
输入一个二叉树的先序序列,孩子为空的位置以#替代。
输出格式:
输出该二叉树的先序遍历序列。输出的遍历序列中字符间均无间隔。
具体格式参看输出样例。
对于下图中给出的二叉树:
输入样例:
ABD##FE###CG#H##I##
输出样例:
ABDFECGHI
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
创建二叉树
二叉树的创建过程是一个递归的过程,递归一般都是这样的格式:
if(递归借书条件)
else(接下来的操作)
那么在创建二叉树是怎么样的呢?
首先if里面是temp不等于'#',对吧
那么当temp不等于#时,我们直接创建一个新的结构体,然后先序的递归创建树
先序遍历:
二叉树无非是递归的具体体现,我们直接if判断结束条件,如果根节点为空,直接结束递归,否则这就cout一下,再接着递归其左右子树
思路具体化:
1.创建二叉树结点的结构体
2.按照我在之前写得方法写一个创建二叉树的函数(注意要用二级指针)
3.既然是要输出先序遍历的结果,当然要写先序遍历的函数啦
4.最后就是超简洁的main函数
代码如下:
#include<iostream>
using namespace std;
//定义结构体
struct BTNode
{
char c;
BTNode* lchild;
BTNode* rchild;
BTNode() {
c = '\0';
lchild = NULL;
rchild = NULL;
}
BTNode(char x) {
c = x;
lchild = NULL;
rchild = NULL;
}
};
BTNode* T;
//创建二叉树
void CreatBTtree(BTNode*& root) {
char temp;
cin >> temp;
if (temp != '#') {
root = new BTNode(temp);
CreatBTtree(root->lchild);
CreatBTtree(root->rchild);
}
}
//先序遍历
void PreOrder(BTNode* root) {
if (root == NULL)
return;
cout << root->c;
PreOrder(root->lchild);
PreOrder(root->rchild);
}
//超简洁的main函数
int main()
{
CreatBTtree(T);
PreOrder(T);
return 0;
}
PS:成功解题=理清思路+一定的技巧~