请编写一个C++程序,完成下列算法:

1、 根据扩展二叉树的前序遍历序列,递归构造二叉树;

2、 以广义表的形式输出二叉树;

3、 验证利用栈实现二叉树后序遍历的非递归算法;

4、 利用队列给出二叉树层次遍历的算法。

二叉树以二叉链表方式存储。

#include<iostream.h>
typedef char ElemType;
#define stackSize 30
typedef struct BiNode
{ElemType data;BiNode *lchild, *rchild;
}Bino;
void Creat(BiNode *&root)
{ElemType ch;cin>>ch;if(ch=='#')   {root=NULL; }else {root=new BiNode; root->data=ch;Creat(root->lchild); Creat(root->rchild); }
}
void InOrder(BiNode *root) //中序遍历
{if (root==NULL) return;     else{InOrder(root->lchild); cout<<root->data<<" "; InOrder(root->rchild);}
}
void PrinTree(BiNode *root)
{if(root==NULL) return;else{cout<<root->data;            if(root->lchild != NULL || root->rchild != NULL ){cout << "(";PrinTree(root->lchild);       if(root->rchild != NULL)cout << ",";PrinTree(root->rchild); cout << ")";}}
}
void Postorder(BiNode *root)//栈后序非递归遍历
{BiNode *S[stackSize];int top=-1;BiNode *p=root;BiNode *pre=NULL;do {while (p!=NULL){ S[++top]=p;p=p->lchild;}if(top>-1){p=S[top];if(p->rchild!=NULL && p->rchild!=pre)p=p->rchild;else{cout<<p->data<<" ";pre=p;p=NULL;top--;}}}while (p!=NULL||top!=-1);
}
void Leveorder(BiNode *root)//队列层序遍历
{BiNode *Q[30],*p;int front,rear;  if(root == NULL) return;front=0;rear=0;Q[++rear]=root;while(front!=rear){front++; p=Q[front];cout<<p->data<<" ";if(p->lchild!=NULL){rear++;Q[rear]=p->lchild;}if(p->rchild!=NULL){rear++;Q[rear]=p->rchild;}}
}
int main()
{BiNode *root;cout<<"先序输入,“#”为叶子节点:"<<endl;Creat(root);cout<<"中序遍历:";InOrder(root);cout<<endl;cout<<"广义表:";PrinTree(root);cout<<endl;cout<<"栈的后序非递归遍历:";Postorder(root);cout<<endl;cout<<"队列的层序遍历:";Leveorder(root);cout<<endl;return 0;
}

C++二叉树遍历递归算法相关推荐

  1. 二叉树先序遍历递归算法(图解)

    前言 二叉树的遍历 是树结构插入.删除.修改.查找和排序运算的前提, 是二叉树一切运算的基础和核心. 二叉树的遍历分为先序.中序.后序遍历, 通过递归实现时, 三者的区别不大, 连代码都不需要修改, ...

  2. 数据结构上机实践第九周项目2 - 二叉树遍历的递归算法

    二叉树遍历的递归算法 递归问题总会成为我们的难点,代码量少,思维量确是很大,难是在所难免的,所以,在思维理解的同时结合实现代码理解,这样就很有可能让我们打开思路,理解的更深,本次实践将在二叉树算法的基 ...

  3. 二叉树遍历的非递归算法

    大一下半期数据结构 知识点 递归算法虽然简单,但一般而言,其执行效率并不高.对于二叉树的遍历操作,可以仿照递归算法执行过程中工作栈的状态变化得到非递归算法. 一.前序遍历非递归算法 二叉树前序遍历非递 ...

  4. 遍历二叉树的递归算法与非递归算法

    遍历二叉树的递归算法与非递归算法 先来看下面这棵二叉树.如图1.现在我们要对它进行先序遍历.递归思想:就是把这个大树拆分成N棵小树,每棵小树都进行一次先序遍历.再把这些遍历连合起来就是这棵树的先序遍历 ...

  5. 数据结构-----后序遍历二叉树非递归算法(利用堆栈实现)

    一.非递归后序遍历算法思想 后序遍历的非递归算法中节点的进栈次数是两个,即每个节点都要进栈两次,第二次退栈的时候才访问节点. 第一次进栈时,在遍历左子树的过程中将"根"节点进栈,待 ...

  6. 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法

    [试题描述]:  给定二叉树先序中序,建立二叉树的递归算法 其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序列,紧跟着是右子树先序遍历序列,固根节点已可从先序序列中分离.在中序序列中找到 ...

  7. 数据结构源码笔记(C语言):二叉树遍历

    //二叉树遍历 #include<stdio.h> #include<malloc.h> #include<malloc.h> #define MaxSize 10 ...

  8. 二叉树遍历算法的六种c语言实现 递归与非递归

    二叉树遍历分为三种: 先序遍历:先访问根结点,其次左节点,最后右节点 中序遍历:先访问左结点,其次跟节点,最后右节点 后序遍历:先访问左结点,其次右节点,最后根节点 三种遍历的递归算法实现形式类似,仅 ...

  9. 8606 二叉树遍历的建设和运营

    8606 二叉树遍历的建设和运营 时限:1000MS  内存限制:1000K 问题: 编程题   语言: 无限 叙述性说明 用二进制表示的名单二叉树结构:按第一个二进制序列,以便输入节点值(一个字符) ...

  10. (王道408考研数据结构)第五章树-第三节1:二叉树遍历(先序、中序和后序)

    文章目录 一:二叉树遍历概述 二:二叉树深度优先遍历 (1)先序遍历-根左右(NLR) (2)中序遍历-左根右(LNR) (3)后序遍历-左右根(LRN) 总结:三种遍历方式动图演示 三:二叉树的层序 ...

最新文章

  1. 全球链界科技发展大会_如何成为科技界的团队合作者
  2. 敏捷估算和计划的12条知道原则
  3. C语言编译构建系统,C语言 之建立静态链接库
  4. 特征选择常用算法综述
  5. jax ws ri 生成java类_JAX-WS(一)之使用wsgen从Java创建简单的WebService
  6. 最新微信公众平台js sdk整合PHP版
  7. YBTOJ洛谷P4074:糖果公园(树上莫队)
  8. micropython stm32f030_24C02 读写代码,基于STM32F030
  9. [渝粤教育] 西南科技大学 管理学原理 在线考试复习资料(5)
  10. 剑指offer(刷题21-30)--c++,Python版本
  11. wpsoffice 安装包_WPS office (安卓、ios) 企业版 软件介绍(附安装包)
  12. 从零开始的数模学习(5):TOPSIS法(评价类模型)
  13. 饿了么神级UI组件库——Element-UI使用指南
  14. 白话大数据--Hash分片
  15. CM311-3_YST_晨星MSO9385_2+8_安卓9.0_TTL免费升级固件
  16. 大数据成神之路?那么你一定要看这里
  17. bzoj4246: 两个人的星座
  18. Angular入门-Hero Editor抽丝
  19. 柔性上肢康复机器人研究中的VR技术
  20. 东莞潇洒老师:分享PROE产品设计塑胶产品结构基本设计

热门文章

  1. 玩机搞机---mtk芯片机型线刷救砖的一些基本解决方法和步骤解析 mtk报错代码 SP_Flash平台刷机
  2. dfema规则_DFMEA失效分析简介
  3. Windows下cuDNN7.6.4下载安装详细步骤
  4. windows CMD 下 长ping 加时间戳,亲测有效
  5. ecshop 源码文件结构说明
  6. 《游戏设计信条》【笔记】
  7. SVN客户端的使用方法
  8. HI3520D 音频
  9. 【MediaSoup】UDPSOCKET recv数据到rtcp包解析
  10. 计算机教师辞职,(多篇)教师辞职报告汇总八篇