zoukankan      html  css  js  c++  java
  • 剑指offer-面试题23.从上往下打印二叉树

    题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入图4.5中

    的二叉树,则依次打印出8、6、10、5、7、9、11二叉树结点的定义如下:

    1 struct BinaryTreeNode
    2 {
    3     int m_nValue;
    4     BinaryTreeNode*  m_pLeft;
    5     BinaryTreeNode*  m_pRight;
    6 };

    我们以如下二叉树为例:

    1                 8
    2                /  
    3               6   10
    4              /   / 
    5             5  7  9 11

    这道题实际上二叉树层次遍历方法:

    解题步骤如下:

    1.设置一个deque双端队列,将根节点加入队列

    2.首先从队头取出根节点,输出根节点的数据值。同时将根节点的左右子结点加入队列,此时队列里面的节点为 6、10

    3.从队头取出节点6,同时加入节点6的左右节点到队列尾,此时队列节点10、5、7

    4.从队头取出节点10,同时加入节点10的左右节点到对尾,此时队列节点为5、7、9、11

    5.此时取出队头节点5,节点5没有左右子节点则输出不必加队列

    5。重复直到队列中元素全部取出后,层次遍历便完成了。

    代码实现如下:

     1 #include <iostream>
     2 #include <deque>
     3 using namespace std;
     4 
     5 struct BinaryTreeNode
     6 {
     7     int m_nValue;
     8     BinaryTreeNode*  m_pLeft;
     9     BinaryTreeNode*  m_pRight;
    10 };
    11 
    12 
    13 void CreateTree(BinaryTreeNode** Root)
    14 {
    15     int data;
    16     cin>>data;
    17     if(data==0)
    18     {
    19         *Root=NULL;
    20         return;
    21     }
    22     else
    23     {
    24         *Root=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
    25         (*Root)->m_nValue=data;
    26         CreateTree(&((*Root)->m_pLeft));    
    27         CreateTree(&((*Root)->m_pRight));
    28     }
    29 }
    30 
    31 
    32 void PreOrder(BinaryTreeNode* Root)
    33 {
    34     if(Root==NULL)
    35         return;
    36     
    37     PreOrder(Root->m_pLeft);
    38     cout<<Root->m_nValue<<endl;
    39     PreOrder(Root->m_pRight);    
    40 }
    41 
    42 void LevelOrder(BinaryTreeNode* Root)
    43 {
    44     if(Root==NULL)
    45         return;
    46     
    47     deque<BinaryTreeNode*> D;
    48     
    49     D.push_back(Root);
    50     
    51     
    52     while(!D.empty())
    53     {
    54         BinaryTreeNode* TempNode=D.front();
    55         D.pop_front();
    56         cout<<TempNode->m_nValue<<",";
    57         
    58         if(TempNode->m_pLeft!=NULL)
    59         {
    60             D.push_back(TempNode->m_pLeft);
    61         }
    62         if(TempNode->m_pRight!=NULL)
    63         {
    64             D.push_back(TempNode->m_pRight);
    65         }
    66     }    
    67 }
    68 
    69 int main()
    70 {
    71     BinaryTreeNode* root;
    72     cout<<"Please input the tree node data(0-exit):
    ";
    73     CreateTree(&root);
    74     cout<<"The PreOrder of Binary Tree:
    ";
    75     PreOrder(root);
    76     cout<<endl;
    77     cout<<"The LevelOrder Of Binary Tree: ";
    78     LevelOrder(root);
    79     cout<<endl;
    80     return 0;
    81 }

    运行截图:

     

  • 相关阅读:
    BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
    BZOJ 2134: 单选错位( 期望 )
    BZOJ 1030: [JSOI2007]文本生成器( AC自动机 + dp )
    BZOJ 2599: [IOI2011]Race( 点分治 )
    BZOJ 3238: [Ahoi2013]差异( 后缀数组 + 单调栈 )
    ZOJ3732 Graph Reconstruction Havel-Hakimi定理
    HDU5653 Bomber Man wants to bomb an Array 简单DP
    HDU 5651 xiaoxin juju needs help 水题一发
    HDU 5652 India and China Origins 并查集
    HDU4725 The Shortest Path in Nya Graph dij
  • 原文地址:https://www.cnblogs.com/vpoet/p/4681119.html
Copyright © 2011-2022 走看看