二叉树------层序遍历

原创 2016年05月31日 09:52:11

题目描述:
给定一棵二叉树,要求从上到下按层输出。(每一层按从左到右的顺序)
思路:
按照按层创建二叉树的方法,使用一个队列。先将根节点入队,然后每次从队中取出队首元素,并将其左右子节点入队,持续此过程知道队列为空。(NULL不入队)

#include <iostream>
#include <deque>
#include <stdio.h>
using namespace std;
#define N 100
struct Node 
{
    char data;
    struct Node *left, *right;
};

struct SeQueue
{
    struct Node *addr[N];
    int front;
    int end;
};

Node *MakeTree();
void DisplayTree(Node *tree);
void PrintTreeByFloor(Node *tree);
void DeleteTree(Node **tree);

int main()
{
    Node *myTree = MakeTree();

    cout << "MidOrder: " << endl;
    DisplayTree(myTree);
    cout << endl;

    cout << "print tree by floor: " << endl;
    PrintTreeByFloor(myTree);
    cout << endl;

    DeleteTree(&myTree);
    return 0;
}

Node *MakeTree()
{
    char ch;
    SeQueue Q;
    SeQueue *q = &Q;
    q->front = 1;
    q->end = 0;
    Node *tmp = NULL;
    Node *root = NULL;

    cout << "Input some chars to make a tree(less than 99 and end by '@'):" << endl;
    ch = getchar();
    while(ch != '@' && ch != '\n')
    {
        tmp = new Node();
        tmp->data = ch;
        tmp->left = tem->right = NULL;
        q->end += 1;
        q->addr[q->end] = tmp;
        if(root = NULL)
        {
            root = tmp;
        }
        else
        {
            if(q->addr[q->front] != NULL)
            {
                if(q->end % 2 == 0)
                    q->addr[q->front]->left = tmp;
                else
                    q->addr[q->front]->right = tmp;
            }
            if(q->end % 2 != 0)
                q->front += 1;
        }
        ch = getchar();
    }
    return root;
}

void DisplayTree(Node *tree)
{
    Node *p = tree;
    if(p)
    {
        DisplayTree(p->left);
        cout << p->data << " ";
        DisplayTree(p->right);
    }
}

void PrintTreeByFloor(Node *tree)
{
    if(tree == NULL)
        return ;
    deque<Node *> treeNode;
    treeNode.push_back(tree);

    while(treeNode.size())
    {
        Node *tmp = treeNode.front();
        treeNode.pop_front();
        cout << tmp->data << " ";
        if(tmp->left)
            treeNode.push_back(tmp->left);
        if(tmp->right)
            treeNode.push_back(tmp->right);
    }
}

void DeleteTree(Node **tree)
{
    if(tree == NULL)
        return ;
    Node *p = *tree;
    if(p)
    {
        DeleteTree(&p->left);
        DeleteTree(&p->right);
        delete [] p;
    }
    *tree = NULL;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

层序遍历二叉树(不借助vector或deque,用C语言实现)

前面几篇文章中,我们对二叉树的层序遍历和层序打印都是借助vector或deque来实现的,本文只通过C语言来实现,代码如下:#include using namespace std; #define...
  • cyuyanenen
  • cyuyanenen
  • 2016年06月02日 19:36
  • 1657

二叉树的层序遍历详细讲解(附完整C++程序)

1 说明   二叉树的层序遍历是面试经常会被考察的知识点,甚至要求当场写出实现过程。笔者先后被腾讯和滴滴面试官问过这个问题,腾讯面试官是让称述整个实现过程,本人自信满满的说出来了,所以也没有对具体实现...
  • FX677588
  • FX677588
  • 2017年07月03日 22:23
  • 3176

层次遍历二叉树-三种不同的方法

给定一棵二叉树,要求进行分层遍历,每层的节点值单独打印一行,下图给出事例结构: 对此二叉树遍历的结果应该是: 1, 2 , 3 4, 5, 6 7, 8 第一种方法,就是利用递归的...
  • zzran
  • zzran
  • 2013年04月09日 16:26
  • 58012

二叉树 层序遍历 java实现 课程设计

  • 2011年01月18日 09:37
  • 22KB
  • 下载

建立二叉树,层序、先序遍历( 用递归或非递归的方法都可以)

  • 2010年12月06日 00:22
  • 98KB
  • 下载

二叉树的层序、先序、中序、后序遍历

  • 2011年12月08日 20:39
  • 3KB
  • 下载

二叉树的先序遍历

  • 2013年07月08日 21:23
  • 165KB
  • 下载

二叉树按层遍历

  • 2014年10月05日 11:21
  • 1KB
  • 下载

C++中二叉树的前序、中序、后序遍历

  • 2017年11月13日 21:24
  • 1KB
  • 下载

java二叉树的前序+中序+后序遍历(修改后)

  • 2014年07月19日 23:25
  • 3KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树------层序遍历
举报原因:
原因补充:

(最多只允许输入30个字)