#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct BTNode {
char data ;
struct BTNode *lchild;
struct BTNode *rchild ;
} *BiTree;
void createBiTree(BiTree *t) {
//此处补充代码,输入二叉树的先序遍历序列建立二叉树
char s;
BiTree q;
s = getchar();
getchar();
if (s == '#') {
*t = NULL;
return ;
}
q = (BiTree)malloc(sizeof(struct BTNode));
q->data = s;
*t = q;
createBiTree(&q->lchild);
createBiTree(&q->rchild);
}
//此处补充代码,定义函数,交换二叉树结点的左右孩子
void swapChildren(BiTree p) {
if (p) {
BiTree temp = p->lchild;
p->lchild = p->rchild;
p->rchild = temp;
swapChildren(p->lchild);
swapChildren(p->rchild);
}
}
void PreOrder(BiTree p) {
//此处补充代码完成二叉树的先序遍历
if (p) {
printf("%c", p->data);
PreOrder(p->lchild);
PreOrder(p->rchild);
}
}
void InOrder(BiTree p) {
//此处补充代码完成二叉树的中序遍历
if (p) {
InOrder(p->lchild);
printf("%c", p->data);
InOrder(p->rchild);
}
}
void PostOrder(BiTree p) {
//此处补充代码完成二叉树的后序遍历
if (p) {
PostOrder(p->lchild);
PostOrder(p->rchild);
printf("%c", p->data);
}
}
int main() {
//此处补充代码,调用函数完成原二叉树的三种遍历序列及交换左右孩子后的三种遍历序列
BiTree t = NULL;
createBiTree(&t);
printf("preorder:");
PreOrder(t);
printf("\n");
printf("inorder:");
InOrder(t);
printf("\n");
printf("postorder:");
PostOrder(t);
printf("\n");
printf("After swap:");
swapChildren(t);
printf("\n");
printf("preorder:");
PreOrder(t);
printf("\n");
printf("inorder:");
InOrder(t);
printf("\n");
printf("postorder:");
PostOrder(t);
printf("\n");
return 0;
}
二叉树
原创
©著作权归作者所有:来自51CTO博客作者wx641ed5d0bdd07的原创作品,请联系作者获取转载授权,否则将追究法律责任

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【数据结构】二叉树的存储结构
【数据结构】第五章——树与二叉树详细介绍二叉树的存储结构……
二叉树 数据结构 C语言 -
【二叉树】输出二叉树
题目在一个 m*n 的二维字符串数组中输出二叉树行数 m 应当等于给定二叉树的 高度列数 n 应当总是 奇数根节点 的值(以字符串格式
swift 算法 深度优先 二叉树 子树 -
翻转二叉树【二叉树】
时间复杂度:空间复杂度:
python 复杂度 Code 空间复杂度 -
【二叉树】合并二叉树
题目给定两个二叉树想象当你将它们中的一个 覆盖 到另一个上时两个二叉树的一些节点便
swift 深度优先 算法 ios objective-c -
【二叉树】重建二叉树
题目输入某二叉树的前序遍历和中序遍历的结果请构建该二叉树并返回其根节点假设
swift 算法 二叉树 中序遍历 子树 -
【二叉树】验证二叉树
题目二叉树上有 n 个节点,按从 0 到 n - 1 编号其中节点 i 的两个子节点分别是 leftChild[i]
swift 二叉树 算法 子节点 数组 -
【二叉树】平衡二叉树
题目给你一个二叉树判断它是否是高度平衡的二叉树一棵高度平衡二叉树定义为:一
swift 算法 开发语言 ios objective-c -
【二叉树】二叉树寻路
题目在一棵无限的二叉树上,每个节点都有两个子节点树中的节点 逐行 依次按 “之” 字形进
swift 二叉树 算法 子节点 五笔 -
【二叉树】二叉树的坡度
给定一个二叉树,计算整个树的`坡度`一个树的 `节点的坡度` 定义为,该节点 `左` 子树的节点之`和` 与 `右`
深度优先 算法 swift ios objective-c