剑指——从上往下打印二叉树(按层遍历)

1人阅读 评论(0) 收藏 举报
分类:

从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

思路:每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾,接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作,直至队列中所有节点都被打印出来为止

#include <stdio.h>
#include <iostream>
#include <deque>
using namespace std;

struct BinaryTree
{
  int m_value;
  struct BinaryTree* leftChild;
  struct BinaryTree* rightChild;
};

//index 设置为&类型 则此函数调用后index会发生改变
BinaryTree* createTree(BinaryTree* root,int* s,int& index)
{
    if(s[index]==0)  //如果第一个是0则代表为空
        return NULL;
    root=new BinaryTree;
    root->m_value=s[index];
    root->leftChild=createTree(root->leftChild,s,++index);
    root->rightChild=createTree(root->rightChild,s,++index);
    return root;
}

//前序遍历
void preTraverse(BinaryTree* root)
{
    if(root==NULL)
        return;
    cout<<root->m_value<<endl;
    preTraverse(root->leftChild);
    preTraverse(root->rightChild);
}

//按层遍历
void PrintFromTopToBottom(BinaryTree* root)
{
    if(root==NULL)  //判断节点是否为空
        return ;
    deque<BinaryTree*> dequeTreeNode;
    dequeTreeNode.push_back(root); //将不为空的节点添加到deque中
    while(dequeTreeNode.size()>0)  //循环结束条件是deque中是否有值
    {
        BinaryTree* tmp=dequeTreeNode.front(); //存储将要po的节点
        dequeTreeNode.pop_front();
        cout<<tmp->m_value<<endl;
        if(tmp->leftChild)  //判断pop出的节点是否有左子节点
            dequeTreeNode.push_back(tmp->leftChild);
        if(tmp->rightChild) //判断pop出的节点是否有右子节点
            dequeTreeNode.push_back(tmp->rightChild);
    }
}

int main()
{
    //输入的时候,不能忘记用0来补充NULL值
    int Tree[]={8,6,5,0,0,7,0,0,10,9,0,0,11,0,0};
    int index=0;
    BinaryTree* root=NULL;
    root=createTree(root,Tree,index);

    preTraverse(root);
    cout<<"----"<<endl;

    PrintFromTopToBottom(root);
    return 0;
}

查看评论

剑指offer - 从上往下遍历二叉树

二叉树结点定义如下: struct BinaryTreeNode{ int value; BinaryTreeNode *pLeft; BinaryTreeNode *pRight; }; ...
  • zkp0601
  • zkp0601
  • 2015-10-01 21:05:06
  • 475

剑指Offer面试题23(Java版):从上往下打印二叉树

题目:从上往下打印二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入下图的二叉树,则一次打印出8,6,10,5,7,9,11. 这道题实质上考察的就是树的遍历算法,只是这种遍历不...
  • jsqfengbao
  • jsqfengbao
  • 2015-08-03 20:41:47
  • 2419

从左往右 从上往下 按层遍历 输出 树 二叉树

需求 将二叉树的 各节点输出, 按照层级输出 4 / \ 2 7 / \ / \ 1 3 6 9 方法1public static void outp...
  • never_cxb
  • never_cxb
  • 2015-08-16 11:12:16
  • 1129

从上往下打印出二叉树的每个节点,同层节点从左至右打印(剑指offer,面试题32)

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 题目思路: 采用一个例子说明: 8,6,10,5,7,9,11. 对于第一层,只有根节点 “8”,第二层有节点“6”和“...
  • sxs11
  • sxs11
  • 2017-07-18 11:36:14
  • 238

题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。

题目: 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。    例如输入   8   / \  6 10 / \ / \ 5 7 9 11 输出8 6...
  • sd6264456
  • sd6264456
  • 2013-09-24 21:13:52
  • 1838

LeetCode之二叉树按层从下往上遍历

题目描述:/** * Given a binary tree, return the bottom-up level order traversal of its nodes' values. (...
  • u011521382
  • u011521382
  • 2016-07-18 11:38:19
  • 3416

C++从上往下打印出二叉树的每个节点,同层节点从左至右打印(牛客剑指offer)

/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...
  • liuhuiyan_2014
  • liuhuiyan_2014
  • 2015-05-05 15:30:28
  • 1848

打印一棵二叉树,要求从上往下打印,每一层从左往右打印

思路:在二叉树的遍历中,用得最多的就是递归,二叉树的先序、中序、后序遍历都可以用递归实现,但是这里却要使用另外一种方式解决。利用队列先入先出的特性,我们先把二叉树每一层的节点按从左往右的顺序加入队列,...
  • zx582727090
  • zx582727090
  • 2016-08-02 15:24:49
  • 846

从上往下打印出二叉树的每个节点,同层节点从左至右打印。 java

从上往下打印出二叉树的每个节点,同层节点从左至右打印。 public ArrayList PrintFromTopToBottom(TreeNode root) { ArrayL...
  • Naploen8
  • Naploen8
  • 2016-04-04 22:55:09
  • 1321

java 从上往下打印出二叉树的每个节点,同层节点从左至右打印。

题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路还是很清晰的,使用两个队列一个存放节点,一个存放值。先将根节点加入到队列中,然后遍历队列中的元素,遍历过程中,访问该元...
  • qq_23217629
  • qq_23217629
  • 2016-06-23 16:35:39
  • 2691
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 816
    排名: 6万+
    文章存档
    最新评论