zoukankan      html  css  js  c++  java
  • 剑指offer系列16:从上往下打印二叉树

    层次打印二叉树,竟然用一个队列就很简单的完成了;

    首先将树的根结点放进队列,然后出的时候是先进先出。并且出去的时候判断这个节点的左右节点是否有节点,如果有就插入队列的后面。

     1 #include<iostream>
     2 #include<vector>
     3 #include<stack>
     4 using namespace std;
     5 struct TreeNode {
     6 int val;
     7 struct TreeNode *left;
     8 struct TreeNode *right;
     9 /*
    10 TreeNode(int x) :
    11 val(x), left(NULL), right(NULL) {
    12 }
    13 */
    14 };
    15 class Solution {
    16 public:
    17     vector<int> PrintFromTopToBottom(TreeNode* root) {
    18         vector<int> re;
    19         
    20         if (root == NULL)
    21             return re;
    22 
    23         std::deque<TreeNode*> de;
    24         de.push_back(root);//先把根结点放进队列中
    25         while(de.size())
    26         {
    27             TreeNode* pnode = de.front();//找到队列的头结点
    28             re.push_back(pnode->val);
    29             if (pnode->left)//判断该结点后是否有结点,如果有结点放到队列后面
    30             {
    31                 de.push_back(pnode->left);
    32             }
    33             if (pnode->right)
    34             {
    35                 de.push_back(pnode->right);
    36             }
    37             de.pop_front();
    38         }
    39         return re;
    40 
    41     }
    42 };
    43 int main()
    44 {
    45     Solution so;
    46     vector<int> aa;
    47     TreeNode list[3];
    48     list[0].val = 1;
    49     list[0].left = &list[1];
    50     list[0].right = &list[2];
    51     list[1].val = 3;
    52     list[1].left =NULL;
    53     list[1].right = NULL;
    54     list[2].val = 2;
    55     list[2].left = NULL;
    56     list[2].right = NULL;
    57     aa = so.PrintFromTopToBottom(list);
    58     for (int i = 0; i < aa.size(); i++)
    59     {
    60         cout << aa[i] << endl;
    61     }
    62     return 0;
    63 }

    有一个小问题,37行的弹出操作也可以写在28之后,也就是说已经弹出队列的第一个结点,之后还可以在存好的指针中找到它的左右指针变量,删除了还能找到吗。

  • 相关阅读:
    从零教你在Linux环境下(ubuntu)如何编译hadoop2.4
    springboot集成redis
    缓存穿透
    关于HashMap,HashTable,HashSet浅析
    关于多线程的几点总结
    java设计模式--工厂模式
    java设计模式--单例模式
    初识Linux(五)--VI/VIM编辑器
    初识Linux(四)--系统常用命令
    初识Linux(三)--文件系统基本结构
  • 原文地址:https://www.cnblogs.com/neverland0718/p/11017646.html
Copyright © 2011-2022 走看看