利用先序遍历输入法建立二叉树
题目:假设二叉树结点的数据为字符,即
struct TreeNode {
char Data;
struct TreeNode * Left;
struct TreeNode * Right;
};
如果对该二叉树遍历打印,并且以#代表空树,那么可以得到一个字符串,例如下面的二叉树:(注:设二叉树的结点数据不能为字符#)
先序遍历结果为:ABC##DE##F###
编写程序,输入一个类似于上面先序遍历结果的字符串,根据此字符串建立二叉树。(算法可参考教材126页)验证该二叉树是否正确。
1.二叉树/二叉排序树结构体:
struct TreeNode{int Data;struct TreeNode*Left;struct TreeNode*Right;
};
2.创建一颗空树:
Struct TreeNode*T;
T=NULL;
3.关于树节点的计算,高度的计算等请看我的另一篇文章(二叉树的实现1):
https://mp.csdn.net/mp_blog/creation/editor/122858841
4.利用先序遍历输入法建立二叉树:
struct TreeNode* Creat() {//在函数中不能进行传参struct TreeNode*T;printf("输入一个字符:\n");char ch;scanf("%c",&ch);//一个一个字符的边输入边插入法getchar(); //消掉在scanf函数中自带的换行符if(ch=='#'){T=NULL;//如果输入的为‘#’,则代表该结点为空}else {T=malloc(sizeof(struct TreeNode));//否则创建一个结点T->Data=ch;//将输入的内容先存入根结点中T->Left=Creat();//再调用本身函数将再次输入的结点存入左子树中T->Right=Creat();//最后存入右子树中}
return T; //返回插入内容后的树
}
实验源代码:
#include<stdio.h>
#include<stdlib.h>struct TreeNode{char Data;struct TreeNode*Left;struct TreeNode*Right;
};
//按先序遍历的顺序建立二叉树
struct TreeNode* Creat() {struct TreeNode*T;printf("输入一个字符:\n");char ch;scanf("%c",&ch);getchar(); if(ch=='#'){T=NULL;}else {T=malloc(sizeof(struct TreeNode));T->Data=ch;T->Left=Creat();T->Right=Creat();}
return T;
}
//先序遍历
void Preorder(struct TreeNode*T){if(T!=NULL){printf("%c",T->Data);Preorder(T->Left);Preorder(T->Right);}if(T==NULL)printf("#");
}
//中序遍历
void Inorder(struct TreeNode*T){if(T!=NULL){Inorder(T->Left);printf("%c",T->Data);Inorder(T->Right);}if(T==NULL)printf("#");
}
//后序遍历
void Postorder(struct TreeNode*T){if(T!=NULL){Postorder(T->Left);Postorder(T->Right);printf("%c",T->Data);}if(T==NULL)printf("#");
}
void Print(struct TreeNode*T){printf("先序遍历为:");Preorder(T);printf("\n"); printf("中序遍历为:");Inorder(T);printf("\n");printf("后序遍历为:");Postorder(T);printf("\n");
}
int main(){struct TreeNode*T;T=Creat();Print(T);return 0;
}
实验结果:
完结撒花!!!!!!!!!!!!!!!!!!!!!!!!!!!
利用先序遍历输入法建立二叉树相关推荐
- 971: 统计利用先序遍历创建的二叉树的深度
971: 统计利用先序遍历创建的二叉树的深度 题目描述 利用先序递归遍历算法创建二叉树并计算该二叉树的深度.先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接 ...
- #swust oj971 和972统计利用先序遍历创建的二叉树的深度和宽度
971: 统计利用先序遍历创建的二叉树的深度 思路: 1.先序递归遍历创建二叉树 2.当接收的数据是字符"#"时表示该结点不需要创建,否则创建该结点 3.最后后序遍历算法统计二叉树 ...
- SWUSTOJ #971 统计利用先序遍历创建的二叉树的深度
SWUSTOJ #971 统计利用先序遍历创建的二叉树的深度 题目 输入 输出 样例输入 样例输出 源代码 题目 利用先序递归遍历算法创建二叉树并计算该二叉树的深度.先序递归遍历建立二叉树的方法为:按 ...
- SWUSTOJ #978 输出利用先序遍历创建的二叉树的中序遍历序列
SWUSTOJ #978 输出利用先序遍历创建的二叉树的中序遍历序列 题目 输入 输出 样例输入 样例输出 源代码 题目 利用先序递归遍历算法创建二叉树并输出该二叉树的中序遍历序列.先序递归遍历建立二 ...
- #swust oj978,979,980输出利用先序遍历创建的二叉树的中序遍历序列,后序遍历序列,层次遍历序
输出利用先序遍历创建的二叉树的中序遍历序列,后序遍历序列,层次遍历序列 ***层次遍历思路: 1.初始化一个队列 2.把根节点指针入队 3.队列非空时:出队列取得一个结点指针,访问该节点,若该节点的左 ...
- [算法] 已知前序和后序遍历,建立二叉树
结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和后序遍历,建立二叉树(不唯一, ...
- SWUST OJ#1051(数据结构之输出利用先序遍历创建的二叉树中的指定结点的Child结点)
目录 题目 思路 数据结构代码 小结 题目 思路 从根节点开始遍历,在节点不为空的前提下,进行类似与数学的分类讨论!!!接下来请各位看代码部分,有疑问评论区留言,有问必答!!! 数据结构代码 #inc ...
- 建立二叉树:已知层次遍历顺序建立二叉树、已知先序遍历顺序建立二叉树
其他二叉树知识!二叉树知识汇总 目录 前提知识: 约定: 二叉树节点的存储结构: 创建一个节点: 建立二叉树的几种方法: 一.已知先序遍历顺序,构建二叉树.(链式存储) 二.已知层次遍历顺序,构建二叉 ...
- SWUST OJ 971: 统计利用先序遍历创建的二叉树的深度
题目描述 利用先序递归遍历算法创建二叉树并计算该二叉树的深度.先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树 ...
最新文章
- 【性能优化之道】每秒上万并发下的Spring Cloud参数优化实战
- python 输出大文本文件
- 看懂GE Predix ,就看懂了工业互联网
- mysql 密码 You must reset your password using ALTER USER statement before executing this statement....
- onpaste事件不生效_从实际开发中来看JavaScript事件循环的使用场景
- jquery easy drag
- Docker 阿里云镜像加速
- cache 的设计与实现--转载
- windows 下phpstudy 升级mysql版本5.7
- MySQL修改字符集步骤(字段插入中文提示错误时解决办法)
- 牛客挑战赛53G-同源数组(Easy Version)【NTT】
- 第二节:比较DateTime和DateTimeOffset两种时间类型并介绍Quartz.Net中用到的几类时间形式(定点、四舍五入、倍数、递增)
- 做了中台就不会死吗?每年至少40%开发资源是被浪费的!
- js 拉勾网效果_python爬取拉勾网职位数据
- UEFI开发探索22 – 环境搭建3(使用UDK2018搭建)
- 曲速未来 揭示:发现假EOS钱包窃取用户资金
- cloc工具 命令行 统计代码行数
- yum软件包管理 yum(软件仓库)
- 关闭Linux防火墙
- 字节流与字符流应用详解