C++二叉树遍历递归算法
请编写一个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++二叉树遍历递归算法相关推荐
- 二叉树先序遍历递归算法(图解)
前言 二叉树的遍历 是树结构插入.删除.修改.查找和排序运算的前提, 是二叉树一切运算的基础和核心. 二叉树的遍历分为先序.中序.后序遍历, 通过递归实现时, 三者的区别不大, 连代码都不需要修改, ...
- 数据结构上机实践第九周项目2 - 二叉树遍历的递归算法
二叉树遍历的递归算法 递归问题总会成为我们的难点,代码量少,思维量确是很大,难是在所难免的,所以,在思维理解的同时结合实现代码理解,这样就很有可能让我们打开思路,理解的更深,本次实践将在二叉树算法的基 ...
- 二叉树遍历的非递归算法
大一下半期数据结构 知识点 递归算法虽然简单,但一般而言,其执行效率并不高.对于二叉树的遍历操作,可以仿照递归算法执行过程中工作栈的状态变化得到非递归算法. 一.前序遍历非递归算法 二叉树前序遍历非递 ...
- 遍历二叉树的递归算法与非递归算法
遍历二叉树的递归算法与非递归算法 先来看下面这棵二叉树.如图1.现在我们要对它进行先序遍历.递归思想:就是把这个大树拆分成N棵小树,每棵小树都进行一次先序遍历.再把这些遍历连合起来就是这棵树的先序遍历 ...
- 数据结构-----后序遍历二叉树非递归算法(利用堆栈实现)
一.非递归后序遍历算法思想 后序遍历的非递归算法中节点的进栈次数是两个,即每个节点都要进栈两次,第二次退栈的时候才访问节点. 第一次进栈时,在遍历左子树的过程中将"根"节点进栈,待 ...
- 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法
[试题描述]: 给定二叉树先序中序,建立二叉树的递归算法 其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序列,紧跟着是右子树先序遍历序列,固根节点已可从先序序列中分离.在中序序列中找到 ...
- 数据结构源码笔记(C语言):二叉树遍历
//二叉树遍历 #include<stdio.h> #include<malloc.h> #include<malloc.h> #define MaxSize 10 ...
- 二叉树遍历算法的六种c语言实现 递归与非递归
二叉树遍历分为三种: 先序遍历:先访问根结点,其次左节点,最后右节点 中序遍历:先访问左结点,其次跟节点,最后右节点 后序遍历:先访问左结点,其次右节点,最后根节点 三种遍历的递归算法实现形式类似,仅 ...
- 8606 二叉树遍历的建设和运营
8606 二叉树遍历的建设和运营 时限:1000MS 内存限制:1000K 问题: 编程题 语言: 无限 叙述性说明 用二进制表示的名单二叉树结构:按第一个二进制序列,以便输入节点值(一个字符) ...
- (王道408考研数据结构)第五章树-第三节1:二叉树遍历(先序、中序和后序)
文章目录 一:二叉树遍历概述 二:二叉树深度优先遍历 (1)先序遍历-根左右(NLR) (2)中序遍历-左根右(LNR) (3)后序遍历-左右根(LRN) 总结:三种遍历方式动图演示 三:二叉树的层序 ...
最新文章
- 全球链界科技发展大会_如何成为科技界的团队合作者
- 敏捷估算和计划的12条知道原则
- C语言编译构建系统,C语言 之建立静态链接库
- 特征选择常用算法综述
- jax ws ri 生成java类_JAX-WS(一)之使用wsgen从Java创建简单的WebService
- 最新微信公众平台js sdk整合PHP版
- YBTOJ洛谷P4074:糖果公园(树上莫队)
- micropython stm32f030_24C02 读写代码,基于STM32F030
- [渝粤教育] 西南科技大学 管理学原理 在线考试复习资料(5)
- 剑指offer(刷题21-30)--c++,Python版本
- wpsoffice 安装包_WPS office (安卓、ios) 企业版 软件介绍(附安装包)
- 从零开始的数模学习(5):TOPSIS法(评价类模型)
- 饿了么神级UI组件库——Element-UI使用指南
- 白话大数据--Hash分片
- CM311-3_YST_晨星MSO9385_2+8_安卓9.0_TTL免费升级固件
- 大数据成神之路?那么你一定要看这里
- bzoj4246: 两个人的星座
- Angular入门-Hero Editor抽丝
- 柔性上肢康复机器人研究中的VR技术
- 东莞潇洒老师:分享PROE产品设计塑胶产品结构基本设计