#include <iostream>
using namespace std;
//二叉树结点
typedef struct BitNode               
{
    char ch;
    struct BitNode *lchild,*rchild;
}BitNode,*BitTree;
//创建链式队列的方法
/*
typedef struct QNode
{
    BitNode *tree;
    struct QNode *next;
}QNode,*Queueptr;
typedef struct
{
    Queueptr fro;
    Queueptr rear;
}LinkQueue;
*/
//按照先序创建二叉树
void CreatBitTree(BitTree &T)
{
    char c;
    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 Show(BitTree T)
{
    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 main()
{
    int m=1;
    cout<<"请按照先序输入:"<<endl;
    BitTree T;
    CreatBitTree(T);
    while(m!=0)
    {
      m=Show(T);
    }
    return 0;
}
/*
测试用例
ABC##DE#G##F###
*/

二叉树的创建一数据结构一C++的更多相关文章

  1. 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历

    根据自己的学习体会并参考了一些网上的资料,以java写出了二叉树的创建.搜索.删除和遍历等操作,尚未实现的功能有:根据先序和中序遍历,得到后序遍历以及根据后序和中序遍历,得到先序遍历,以及获取栈的深度 ...

  2. c/c++二叉树的创建与遍历(非递归遍历左右中,破坏树结构)

    二叉树的创建与遍历(非递归遍历左右中,破坏树结构) 创建 二叉树的递归3种遍历方式: 1,先中心,再左树,再右树 2,先左树,再中心,再右树 3,先左树,再右树,再中心 二叉树的非递归4种遍历方式: ...

  3. 二叉树的创建、遍历(递归和非递归实现)、交换左右子数、求高度(c++实现)

    要求:以左右孩子表示法实现链式方式存储的二叉树(lson—rson),以菜单方式设计并完成功能任务:建立并存储树.输出前序遍历结果.输出中序遍历结果.输出后序遍历结果.交换左右子树.统计高度,其中对于 ...

  4. JS实现二叉树的创建和遍历

    1.先说二叉树的遍历,遍历方式: 前序遍历:先遍历根结点,然后左子树,再右子树 中序遍历:先遍历左子树,然后根结点,再右子树 后续遍历:先遍历左子树,然后右子树,再根结点   上代码:主要还是利用递归 ...

  5. java 二叉树的创建 遍历

    本来说复习一下BFS和DFS,辗转就来到了二叉树...本文包括二叉树的创建和遍历 概念 数据:1 2 3 4 5 6 7生成一颗二叉树 上面的数是数据,不是位置,要区别一下数据和位置 红色的代表位置, ...

  6. [PHP] 数据结构-二叉树的创建PHP实现

    1.利用递归的原理,只不过在原来打印结点的地方,改成了生成结点,给结点赋值的操作if(ch=='#'){*T=NULL;}else{malloc();(*T)->data=ch;createFu ...

  7. Java实现二叉树的创建和遍历操作(有更新)

    博主强烈建议跳过分割线前面的部分,直接看下文更新的那些即可. 最近在学习二叉树的相关知识,一开始真的是毫无头绪.本来学的是C++二叉树,但苦于编译器老是出故障,于是就转用Java来实现二叉树的操作.但 ...

  8. C语言实现二叉树的创建&遍历

    算法思想(重点是递归的使用)  利用扩展先序遍历序列创建二叉链表 采用类似先序遍历的递归算法,首先读入当前根结点的数据,如果是'.'则将当前 树根置为空,否则申请一个新结点,存入当前根结点的数据,分别 ...

  9. 剑指offer十七姊妹篇之二叉树的创建、遍历、判断子二叉树

    1.二叉树节点类 public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public Tr ...

随机推荐

  1. 详解Supervisor进程守护监控

    Supervisor在百度百科上给的定义是超级用户,监管员.Supervisor是一个进程管理工具,当进程中断的时候Supervisor能自动重新启动它.可以运行在各种类unix的机器上,superv ...

  2. Codeforces - 346A - Alice and Bob - 简单数论

    http://codeforces.com/problemset/problem/346/A 观察了一下,猜测和他们的最大公因数有关,除以最大公因数前后结果是不会变的. 那么怎么证明一定是有n轮呢?我 ...

  3. dijkstra算法的应用(poj2387)+堆优化【还没学C艹很尴尬,不理解的先不写了,未完,待续...】

    一题非常简单的最短路题目,但是我就是很撒比的错在了,1.初始化:2.判断重边 堆优化,使用优先队列的堆优化:复杂度:O(ElogE); #include <stdio.h> #includ ...

  4. AFN清除图片缓存 以及菊花转圈

    AFNetworking网络库已经提供了很好的图片缓存机制,效率是比较高的,但是我发现没有直接提供清除缓存的功能,可项目通常都需要添加 清除功能的功能,因此,在这里我以UIImageView+AFNe ...

  5. P1223 [小数据版]边权差值最小的生成树

    这道题和最小生成树kruskal的代码几乎相同,只不过不一定是最小生成树,所以不一定从最短的边开始做生成树:所以将每一条边分别作为起点,然后枚举就行了...... #include <bits/ ...

  6. Python入门小练习 003 利用cookielib模拟登录获取账户信息

    为了方便, 使用chinaunix的账户获取账户主题. 有些网站可能需要验证码,  找一些不用验证码的网站 下面 ****** 很多个星号的均为私密信息, 所以用星号代替 #!/usr/bin/pyt ...

  7. bzoj 4860 [BeiJing2017]树的难题

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4860 题解 点分治 设当前重心为v 假设已经把所有边按照出发点第一关键字, 颜色第二关键字排 ...

  8. 2015 ACM-ICPC国际大学生程序设计竞赛北京赛区网络赛 1002 Mission Impossible 6

    题目链接: #1228 : Mission Impossible 6 解题思路: 认真读题,细心模拟,注意细节,就没有什么咯!写这个题解就是想记录一下rope的用法,以后忘记方便复习. rope(块状 ...

  9. 贪心 HDOJ 5090 Game with Pearls

    题目传送门 /* 题意:给n, k,然后允许给某一个数加上k的正整数倍,当然可以不加, 问你是否可以把这n个数变成1,2,3,...,n, 可以就输出Jerry, 否则输出Tom. 贪心:保存可能变成 ...

  10. Contextual Action bar(3) 两个示例

    一.通过activity启动Context Action Bar 1.主java public class ActivityActionModeFrgmt extends Fragment imple ...