二叉树的创建一数据结构一C++
typedef struct BitNode
{
char ch;
struct BitNode *lchild,*rchild;
}BitNode,*BitTree;
/*
typedef struct QNode
{
BitNode *tree;
struct QNode *next;
}QNode,*Queueptr;
{
Queueptr fro;
Queueptr rear;
}LinkQueue;
*/
void CreatBitTree(BitTree &T)
{
cin>>c;
if(c=='#')
T = NULL;
else
{
T = new BitNode;
T -> ch = c;
CreatBitTree(T -> lchild);
CreatBitTree(T -> rchild);
}
}
void Print1(BitTree T)
{
if(T != NULL)
{
cout<<T -> ch;
Print1(T -> lchild);
Print1(T -> rchild);
}
}
void Print2(BitTree T)
{
if(T != NULL)
{
Print2(T -> lchild);
cout<<T -> ch;
Print2(T -> rchild);
}
}
void Print3(BitTree T)
{
if(T != NULL)
{
Print3(T -> lchild);
Print3(T -> rchild);
cout<<T -> ch;
}
}
void Print4(BitTree T)
{
int m=10,i=0,fro=0,rear=0;
BitTree *a = new BitTree[m];
BitNode *t,*t1;
a[rear] = T;
cout<<a[rear] -> ch;
rear = (rear+1)%(m+1); //最大a[10]
while(fro != rear)
{
t = a[fro];
fro = (fro+1)%(m+1); //读取一个双亲并删除
if(t -> lchild)
{
t1 = t -> lchild;
a[rear] = t1;
rear = (rear+1)%(m+1);
cout<<t1 -> ch;
}
if(t -> rchild)
{
t1 = t -> rchild;
a[rear] = t1;
rear = (rear+1)%(m+1);
cout<<t1 -> ch;
}
}
}
{
int n;
cout<<"请输入遍历的顺序 1:先序遍历 2:中序遍历 3:后序遍历 4:层次遍历 5:退出程序"<<endl;
cin>>n;
switch(n)
{
case 1:
{
Print1(T);
cout<<endl;
}
break;
case 2:
{
Print2(T);
cout<<endl;
}
break;
case 3:
{
Print3(T);
cout<<endl;
}
break;
case 4:
{
Print4(T);
cout<<endl;
}
break;
case 5:
{
cout<<"程序退出成功"<<endl;
return 0;
}
break;
default:
cout<<"输入有误,重新输入"<<endl;
break;
}
}
{
int m=1;
cout<<"请按照先序输入:"<<endl;
BitTree T;
CreatBitTree(T);
while(m!=0)
{
m=Show(T);
}
return 0;
}
测试用例
ABC##DE#G##F###
*/
二叉树的创建一数据结构一C++的更多相关文章
- 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历
根据自己的学习体会并参考了一些网上的资料,以java写出了二叉树的创建.搜索.删除和遍历等操作,尚未实现的功能有:根据先序和中序遍历,得到后序遍历以及根据后序和中序遍历,得到先序遍历,以及获取栈的深度 ...
- c/c++二叉树的创建与遍历(非递归遍历左右中,破坏树结构)
二叉树的创建与遍历(非递归遍历左右中,破坏树结构) 创建 二叉树的递归3种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 二叉树的非递归4种遍历方式: ...
- 二叉树的创建、遍历(递归和非递归实现)、交换左右子数、求高度(c++实现)
要求:以左右孩子表示法实现链式方式存储的二叉树(lson—rson),以菜单方式设计并完成功能任务:建立并存储树.输出前序遍历结果.输出中序遍历结果.输出后序遍历结果.交换左右子树.统计高度,其中对于 ...
- JS实现二叉树的创建和遍历
1.先说二叉树的遍历,遍历方式: 前序遍历:先遍历根结点,然后左子树,再右子树 中序遍历:先遍历左子树,然后根结点,再右子树 后续遍历:先遍历左子树,然后右子树,再根结点 上代码:主要还是利用递归 ...
- java 二叉树的创建 遍历
本来说复习一下BFS和DFS,辗转就来到了二叉树...本文包括二叉树的创建和遍历 概念 数据:1 2 3 4 5 6 7生成一颗二叉树 上面的数是数据,不是位置,要区别一下数据和位置 红色的代表位置, ...
- [PHP] 数据结构-二叉树的创建PHP实现
1.利用递归的原理,只不过在原来打印结点的地方,改成了生成结点,给结点赋值的操作if(ch=='#'){*T=NULL;}else{malloc();(*T)->data=ch;createFu ...
- Java实现二叉树的创建和遍历操作(有更新)
博主强烈建议跳过分割线前面的部分,直接看下文更新的那些即可. 最近在学习二叉树的相关知识,一开始真的是毫无头绪.本来学的是C++二叉树,但苦于编译器老是出故障,于是就转用Java来实现二叉树的操作.但 ...
- C语言实现二叉树的创建&遍历
算法思想(重点是递归的使用) 利用扩展先序遍历序列创建二叉链表 采用类似先序遍历的递归算法,首先读入当前根结点的数据,如果是'.'则将当前 树根置为空,否则申请一个新结点,存入当前根结点的数据,分别 ...
- 剑指offer十七姊妹篇之二叉树的创建、遍历、判断子二叉树
1.二叉树节点类 public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public Tr ...
随机推荐
- Goroutine被动调度之一(18)
本文是<Go语言调度器源代码情景分析>系列的第18篇,也是第四章<Goroutine被动调度>的第1小节. 前一章我们详细分析了调度器的调度策略,即调度器如何选取下一个进入运行 ...
- 关于 <meta name="viewport" content="width=device-width, initial-scale=1.0">的解释
对于移动开发来讲,我还不太熟悉.今天在github上荡了一个系统源码,进行分析.发现其中有这样一段话: <meta name="viewport" content=" ...
- python 字符串操作一
一.创建字符串 >>> s1 = '12345' >>> s1 '12345' >>> s2 = str(12345) >>> ...
- (4)javascript的运算符以及运算符的优先级
运算符的使用方法 在javascript的程序中要完成各种各样的运算,是离不开运算符的. 在javascript中,按运算符类型可以分为 ...
- 洛谷p1955[NOI2015]程序自动分析
题目: 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量 ...
- Kruskal 2015百度之星初赛2 HDOJ 5253 连接的管道
题目传送门 /* 最小生成树(Kruskal):以权值为头,带入两个端点,自然的排序;感觉结构体的并查集很好看 注意:题目老头要的是两个农田的高度差,中文水平不好,题意理解成和平均值的高度差! */ ...
- NFS与AutoNFS实例
NFS概述: NFS,是Network File System的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文 ...
- 对js 面对对象编程的一些简单的理解
由简单开始深入: 最简单的 直接对象开始 var desen = { age:24, name:'xyf', job:'fontEnd', getName:function(){ console.lo ...
- ES6学习笔记(3)----字符串的扩展
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 字符串的扩展ES6之前只能识别\u0000 - \uFFFF 之间的字符,超过此范围,识别会出错 ...
- laravel学习笔记(一)
laravel 简述 优点:优雅.简洁.工程化(项目架构,协同开发) 版本:2011 June 1.0 ,LTS(long time) ,laravel 5.4 功能:队列.搜索.数据库搜索.定时脚本 ...