题目:请你编写完整的程序构建一棵二叉树并对其进行先序遍历、中序遍历、后序遍历与层次遍历,分别打印并输出遍历结果
难度:★★★
- typedef struct Node{
- char data;//数据域
- struct Node* left;//左子树
- struct Node* right;//右子树
- }BiNode,*BiTree;//二叉链表
按照先序遍历的的顺序逐个输入结点的值来构建二叉树,其中,以字符‘#’表示该结点为叶子结点,即没有左右孩子,递归地构建左子树与右子树。
- void CreateBiTree(BiTree &T)
- {
- //按先序序列输入二叉树中的结点值
- char key;
- printf("请先序输入字符:");
- scanf("%c",&key);
- //输入#代表该结点为叶子结点,结束插入
- if(key == '#') T = NULL;
- else
- {
- //分配空间创建新结点
- T = (BiNode*) malloc (sizeof(BiNode));
- T->data = key;
- CreateBiTree(T->left) ; //构造左子树
- CreateBiTree(T->right) ;//构造右子树
- }
- }
- //先序遍历(根左右)
- void PreOrder(BiTree T){
- if(T){
- visit(T);
- PreOrder(T->left);
- PreOrder(T->right);
- }
- }
- //中序遍历(左根右)
- void InOrder(BiTree T){
- if(T){
- InOrder(T->left);
- visit(T);
- InOrder(T->right);
- }
- }
- //后序遍历(左右根)
- void PostOrder(BiTree T){
- if(T){
- PostOrder(T->left);
- PostOrder(T->right);
- visit(T);
- }
- }
- //层次遍历(自上而下,从左到右)
- void LevelOrder(BiTree T){
- InitQueue(Q);//初始化一个队列
- BiTree p;//p为当前遍历的结点
- EnQueue(Q,p);//根节点入队
- while(!IsEmpty(Q)){
- DeQueue(Q,p);
- visit(p);
- if(p->left!=NULL){
- //左孩子入队
- EnQueue(Q,p->left);
- }
- if(p->right!=NULL){
- //右孩子入队
- EnQueue(Q,p->right);
- }
- }
- }
- #include
- #include
- #include
- using namespace std;
- typedef struct Node{
- char data;
- struct Node* left;
- struct Node* right;
- }BiNode,*BiTree;
-
- //构建二叉树
- void CreateBiTree(BiTree &T)
- {
- //按先序序列输入二叉树中的结点值
- char key;
- printf("请先序输入字符:");
- scanf("%c",&key);
- //输入#代表该结点为叶子结点,结束插入
- if(key == '#') T = NULL;
- else
- {
- //分配空间创建新结点
- T = (BiNode*) malloc (sizeof(BiNode));
- T->data = key;
- CreateBiTree(T->left) ; //构造左子树
- CreateBiTree(T->right) ;//构造右子树
- }
- }
-
- //访问并输出根结点
- void visit(BiTree T){
- cout<
data<<" "; - }
-
- //先序遍历:DLR
- void PreOrder(BiTree T){
- if(T){
- visit(T);
- PreOrder(T->left);
- PreOrder(T->right);
- }
- }
-
- //中序遍历:LDR
- void InOrder(BiTree T){
- if(T){
- InOrder(T->left);
- visit(T);
- InOrder(T->right);
- }
- }
-
- //后序遍历:LRD
- void PostOrder(BiTree T){
- if(T){
- PostOrder(T->left);
- PostOrder(T->right);
- visit(T);
- }
- }
-
- //层序遍历
- void LevelOrder(BiTree T){
- if(T==NULL) return ;
- queue
que; - que.push(T);
- while(!que.empty()){
- BiTree ptr=que.front();
- cout<
data<<" "; - que.pop();
- if(ptr->left!=NULL)
- que.push(ptr->left);
- if(ptr->right!=NULL)
- que.push(ptr->right);
- }
- }
-
- int main(){
- BiTree T;
- CreateBiTree(T);
- cout<<"二叉树构建完成!"<
- cout<<"先序遍历:";PreOrder(T);cout<
- cout<<"中序遍历:";InOrder(T);cout<
-
-
相关阅读:
Android 开发技巧:音乐播放器的后台处理【Service、Handler、MediaPlayer】
学习css 伪类:has
【附源码】计算机毕业设计JAVA计算机系教师教研科研管理系统
特殊类的设计
Docker - 私有云、数据卷、网络
【算法】单调栈
基于uni-app与图鸟UI打造的各领域移动端模板大赏
燃气管网监测系统,让城市生命线更安全
leetcode_2909元素和最小的山形三元组
npm发布自己的包
-
原文地址:https://blog.csdn.net/qq_52487066/article/details/134404433