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 }

    运行截图:

     

  • 相关阅读:
    A1044. Shopping in Mars (25)
    A1019. General Palindromic Number (20)
    A1018. Public Bike Management (30)
    26850: 收集数码晶体 有40%错误
    A1016. Phone Bills (25)
    A1014. Waiting in Line (30)
    A1011. World Cup Betting (20)
    A1010. Radix (25)
    A1009. Product of Polynomials (25)
    A1008. Elevator (20)
  • 原文地址:https://www.cnblogs.com/vpoet/p/4681119.html
Copyright © 2011-2022 走看看