c语言二叉树遍历后输出格式问题!(求帮忙修改代码)
题目描述求二叉树的先序、中序及后序遍历序列。结点数<=100。输入按先序遍历的顺序建立一个二叉树,为了保证树的唯一性,并在程序中的递归出口是左右子树为空,故输入时,当某结...
题目描述
求二叉树的先序、中序及后序遍历序列。结点数<=100。
输入
按先序遍历的顺序建立一个二叉树,为了保证树的唯一性,并在程序中的递归出口是左右子树为空,故输入时,当某结点的左子树或右子树为空值时也要作为先序遍历的有效输入。例如一个树只有3个结点,根结点值为1,其左孩子结点值为2,其右孩子结点值为3,则输入的先序遍历序列依次为1 2 0 0
3 0 0(为空时输入0值)*/
结点的值为整数。
输出
在三行上,依次输出二叉树的先序、中序及后序遍历序列。序列中各数用空格隔开。
样例输入
1 2 0 0 3 0 0
样例输出
1 2 3
2 1 3
样例输出里每一行的最后一个数字不要输出空格,可是我的代码是每个数字后都会输出一个空格,求帮改代码
#include<iostream>
using namespace std;
#include <stdio.h>
typedef struct node
{
struct node *lchild;
struct node *rchild;
int data;
}BiTreeNode, *BiTree;
void createBiTree(BiTree &T)//先序遍历创建二叉树
{
int c;
scanf("%d",&c);
if(0== c)
T = NULL;
else
{
T = new BiTreeNode;
T->data = c;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
}
void first(BiTree T)//先序遍历
{
if(T)
{
printf("%d",T->data);
first(T->lchild);
first(T->rchild);
}
}
void middle(BiTree T)//中序遍历
{
if(T)
{
middle(T->lchild);
printf("%d",T->data);
middle(T->rchild);
}
}
void last(BiTree T)//后序遍历
{
if(T)
{
last(T->lchild);
last(T->rchild);
printf("%d",T->data);
}
}
int main()
{
BiTree T;
createBiTree(T);
first(T);
printf("\n");
middle(T);
printf("\n");
last(T);
return 0;
} 展开
求二叉树的先序、中序及后序遍历序列。结点数<=100。
输入
按先序遍历的顺序建立一个二叉树,为了保证树的唯一性,并在程序中的递归出口是左右子树为空,故输入时,当某结点的左子树或右子树为空值时也要作为先序遍历的有效输入。例如一个树只有3个结点,根结点值为1,其左孩子结点值为2,其右孩子结点值为3,则输入的先序遍历序列依次为1 2 0 0
3 0 0(为空时输入0值)*/
结点的值为整数。
输出
在三行上,依次输出二叉树的先序、中序及后序遍历序列。序列中各数用空格隔开。
样例输入
1 2 0 0 3 0 0
样例输出
1 2 3
2 1 3
样例输出里每一行的最后一个数字不要输出空格,可是我的代码是每个数字后都会输出一个空格,求帮改代码
#include<iostream>
using namespace std;
#include <stdio.h>
typedef struct node
{
struct node *lchild;
struct node *rchild;
int data;
}BiTreeNode, *BiTree;
void createBiTree(BiTree &T)//先序遍历创建二叉树
{
int c;
scanf("%d",&c);
if(0== c)
T = NULL;
else
{
T = new BiTreeNode;
T->data = c;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
}
void first(BiTree T)//先序遍历
{
if(T)
{
printf("%d",T->data);
first(T->lchild);
first(T->rchild);
}
}
void middle(BiTree T)//中序遍历
{
if(T)
{
middle(T->lchild);
printf("%d",T->data);
middle(T->rchild);
}
}
void last(BiTree T)//后序遍历
{
if(T)
{
last(T->lchild);
last(T->rchild);
printf("%d",T->data);
}
}
int main()
{
BiTree T;
createBiTree(T);
first(T);
printf("\n");
middle(T);
printf("\n");
last(T);
return 0;
} 展开
1个回答
展开全部
在输出前先判断一下左右子树是否为空,以first为例:
void first(BiTree T)//先序遍历
{
if(T)
{
printf("%d",T->data);
if(T->lchild || T->rchild)
printf(" "); //后面还有,多输出一个空格
更多追问追答
追答
那把左右子树的判断分开就可以了,如下:
void first(BiTree T)//先序遍历
{
if(T)
{
printf("%d",T->data);
if(T->lchild)
{
printf(" ");
first(T->lchild);
}
if(T->rchild)
{
printf(" ");
first(T->rchild);
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询