求二叉树后序遍历中的左右子树交换 C语言编程

求大神帮忙,二叉树先后序遍历输出,再左右子树交换输出,用c语言,急!!!

给你一段代码。C++写的,你可以自己稍微修改一下:
#include<iostream>
using namespace std;

#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Status ;
typedef char TElemType;

typedef struct TreeNode{ //定义的树结点
TElemType Data;
struct TreeNode *lchild,*rchild;
}TreeNode,*Treep;

Treep CreateTree(Treep &T) //使用先序遍历优势创建
{
char ch;
// cout<<"\n请你输入你要创建的树元素:";
cin>>ch;
if(ch == '#') //若是"#",代表该节点为空
T = NULL;
else
{
T = new TreeNode; //申请空间
if(!T)
return ERROR; //空间申请失败返回错误信息
T->Data = ch; //键盘输入结点信息
CreateTree(T->lchild); //递归调用创建左子树
CreateTree(T->rchild); //递归调用创建右子树
}
return T;
}

void TreeTreaverseF(Treep T) //二叉树先序遍历
{

if(T)
{
cout<<T->Data; //输出根节点值
TreeTreaverseF(T->lchild); //递归调用输出左子树
TreeTreaverseF(T->rchild); //递归调用输出右子树
}
}

void TreeTreaverseS(Treep T) //中序遍历二叉树
{
if(T)
{
TreeTreaverseS(T->lchild); //递归调用输出左子树
cout<<T->Data; //输出左节点
TreeTreaverseS(T->rchild); //递归调用输出右子树
}
}

void TreeTreaverseT(Treep T)
{
if(T)
{
TreeTreaverseT(T->lchild); //递归调用输出左子树
TreeTreaverseT(T->rchild); //递归调用输出右子树
cout<<T->Data; //输出右节点
}
}

int main()
{
Treep T=NULL;
cout<<"\n开始创建树状结构...\n";
cout<<"\n各元素以空格隔开\n";
CreateTree(T);

cout<<"\n先序遍历输出树...\n";
TreeTreaverseF(T);
cout<<endl<<endl;

cout<<"\n中序遍历输出树...\n";
TreeTreaverseS(T);
cout<<endl<<endl;

cout<<"\n后序遍历输出树...\n";
TreeTreaverseT(T);
cout<<endl<<endl;

return 0;
}
温馨提示:内容为网友见解,仅供参考
无其他回答

交换二叉树的所有节点的左右子树算法(C语言)
二叉树最好使用递归的算法,假设二叉树节点定义如下:typedef struct node{ int a;node* left;node* right;};可以定义交换左右子树的函数如下:void changeleaf(node* anode){ if(anode!=0){ node* tnode=anode->left;anode->left=anode->right;anode->right=tnode;changeleaf(anode->left);cha...

c语言二叉树问题,勿写代码,求详细思考过程
从后序遍历:CDABE得出E是最顶根节点。然后中序遍历:CADEB得出CAD是E的左子树中的,B是E的右子树中的。再分析后序遍历CDA可以知道A是CD的根,而中序是CAD得到C是A的左子树,D是A的右子树。(如下图)最后,先序遍历:若树不空,则先访问根结点,然后依次先根遍历各棵子树。于是得到结束: ...

...试写出算法(C函数):将所有结点的左右子树互换。
(5)LSIBLING(BT,x) 和 RSIBING(BT,x) 求兄弟函数。分别求二叉树 BT中结点 x的左兄弟和右兄弟结点。若结点 x是根结点或不在 BT中或是其双亲的左 \/右子树根 ,则函树值 为 “空 ”。(6)CRT_BT(x,LBT,RBT) 建树操作。生成一棵以结点 x为根,二叉树 LBT和 RBT分别为左, 右子树的二...

pascal给出一棵二叉树的中序与后序排列。求出它的先序排列(帮忙解释一...
先序:根左右;后序,左右根;中序,左根右。看过程:是递归调用的:if length(s2)=1 then write(s2){如果当前后序遍历只有一个就直接输出该位置} else begin k:=pos(s2[length(s2)],s1);{后序排序的最后一个是当前序列的根,寻找根在中序排序中的位置,则中序排序被跟分成前面后面两节...

二叉树的前序遍历、中序遍历、后序遍历有什么口诀吗
(1)前序遍历第一个节点为根节点(2)中序遍历特性中间为根,左侧为左子树,右侧为右子树(3)后序遍历最后一个节点为根节点 解:第一步:根据前序遍历第一个节点为根节点得知,A为根 第二步:根据中序DBEAC得知,A前面的是左子树,说明 DBE在 A左侧,C在右侧,目前可以得出AC的位置 第三步...

...请问已知二叉树的中序遍历为BDCEAFHG,和后序遍历EDCBHGFA,二叉树...
中序遍历为BDCEAFHG(左根右)后序遍历EDCBHGFA(左右根)所以,根为A,左子树BDCE,右子树FHG 同理,再次可求得左子树BDCE中B应为左子树:但在后序遍历中B为EDCB中的根。所以,题目有错。如有疑问,请追问。

写出二叉树的先序遍历、中序遍历、后序遍历。
1. 先序遍历:首先访问根节点,接着遍历左子树,最后遍历右子树。这是一种递归过程,从根节点开始,向下依次处理左子树和右子树。2. 中序遍历:先遍历左子树,然后访问根节点,最后遍历右子树。中序遍历对于排序二叉查找树尤为重要,因为它们的节点是按照升序排列的。3. 后序遍历:首先遍历左子树,...

怎么写二叉树的先序遍历、中序遍历、后序遍历?
那么,根据后序的遍历规则,我们可以知道,后序遍历顺序为:AEFDHZMG 二叉树的一些介绍:在计算机科学中,二叉树是每个节点最多有两个子树的 树结构 。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现 二叉查找树 和 二叉堆 。二叉树的每个结点至多只有二...

写出二叉树的先序遍历、中序遍历、后序遍历。
以J为根节点的右子树 接下来可以进行遍历了:前序遍历 是 根 左子树 右子树:即先是跟节点A 然后遍历 B子树 遍历完B子树后 再遍历C子树 即最后答案为:ABDGHECKFIJ 中序遍历为 左子树 根 右子树 先遍历 B子树 遍历完了 再是A节点 然后是右子树 答案为:GDHBEAKCIJF 后序遍历是 左子树 右...

求这个二叉树的前中后遍历
中序遍历是先遍历左子树,再访问当前节点,最后是右子树。后序遍历是先遍历左子树,再遍历右子树,最后访问当前节点。例:一棵二叉树的先根遍历为ABCDEFG,中根遍历为CBDEAGF,则其后根遍历为 :1、先序遍历的第一个当前节点一定是根节点,所以A是根 2、由于中序遍历是先遍历完左子树再访问当前节点...

相似回答