#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. hdoj1160【DP】

    现在还很弱,贴一个我bin的结题报告日后写到一定会了加油 说说感觉,读题不读好,然后读完想不出,知道是dp不好好想,先排序一列,再求另一列,dp[ i ]代表长度,那么需要输出整个序列需要路径和一个标 ...

  2. 洛谷 P2296 寻找道路【bfs+spfa】

    反向建边bfs出不能到t的点,然后对每个能到这些点的点打上del标记,然后spfa的时候不经过这些点即可 #include<iostream> #include<cstdio> ...

  3. JZOJ4307. 【NOIP2015模拟11.3晚】喝喝喝

    Description

  4. P1219 最优贸易

    C国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市. 任意两个城市之间最多只有一条道路直接相连. 这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的 ...

  5. 「开源」目前见过的最好的开源OA产品

    这是我目前见过的最好的开源OA产品.功能完整,代码结构清晰.值得推荐. 1.项目介绍 oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目,mysql ...

  6. c++继承汇总(单继承、多继承、虚继承、菱形继承)

    多重继承中,一个基类可以在派生层次中出现多次,如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多分同名成员.C++提供虚基类的方法使得在 ...

  7. IE下png图片黑边问题

    png图片在ie8下有黑色边框的情况想必大家都有遇到过吧,那么该怎么解决呢?其实很简单,下面的方法或许对大家有所帮助 background-image:url(******.png)!importan ...

  8. 模拟 HDOJ 5095 Linearization of the kernel functions in SVM

    题目传送门 /* 题意:表达式转换 模拟:题目不难,也好理解题意,就是有坑!具体的看测试样例... */ #include <cstdio> #include <algorithm& ...

  9. linux的目录结构详细介绍

    linux的目录结构详细介绍 1. /目录(根目录) 2./ect/目录 特定主机系统范围内的配置文件. 3./usr/目录 默认软件都会存于该目录下.用于存储只读用户数据的第二层次:包含绝大多数的用 ...

  10. AJPFX关于Timer类的学习

    * Timer类:计时器public class Demo1 { public static void main(String[] args) throws InterruptedException ...