• 2016.6.24——vector<vector<int>>【Binary Tree Level Order Traversal】


    Binary Tree Level Order Traversal

    本题收获:

    1.vector<vector<int>>的用法

      vector<vector<int> >注意<int>后面的空格,vector<vector<int>>表示的是二位向量

      输出格式(后面代码),不知道大小时,在vector中用push_back(vector<int>())

    2.树用迭代

      题目:

      Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

      For example:
      Given binary tree [3,9,20,null,null,15,7],

          3
         / 
        9  20
          /  
         15   7
    

      return its level order traversal as:

      [
        [3],
        [9,20],
        [15,7]
      ]
    

      思路:

        :1.用vector<vector<int>>输出二位数组 2.迭代。

      代码:

     1 vector<vector<int>> ret;
     2 
     3 void buildVector(TreeNode *root, int depth)
     4 {
     5     if(root == NULL) return;
     6     if(ret.size() == depth)
     7         ret.push_back(vector<int>());    //depth的设置很巧妙
     8 
     9     ret[depth].push_back(root->val);
    10     buildVector(root->left, depth + 1);
    11     buildVector(root->right, depth + 1);
    12 }
    13 
    14 vector<vector<int> > levelOrder(TreeNode *root) {
    15     buildVector(root, 0);
    16     return ret;
    17 }

      vector<vector<int>>输出格式:

     1 int n = res.size();
     2     for (int i = 0; i < n; i++)
     3     {
     4         int m = res[i].size();                //注意vector<vector<int> >的输出,以及size是怎么设定 
     5         for (int j = 0; j < m; j++)
     6         {
     7             cout << res[i][j] << " ";
     8         }
     9         cout << endl;                        //输出格式 cout << endl的位置
    10     }

      全部测试代码:

     1 // Binary Tree Level Order Traversal.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include "iostream"
     6 #include "malloc.h"
     7 #include "vector"
     8 using namespace std;
     9 
    10 struct TreeNode
    11 {
    12     int val;
    13     TreeNode *left, *right;
    14     TreeNode(int x) : val(x), left(NULL), right(NULL){};
    15 };
    16 
    17 class MyClass
    18 {
    19 public:
    20     vector<vector<int> > res;
    21     vector<vector<int>> levelOrder(TreeNode* root)
    22     {
    23         
    24         buildvector(root, 0);
    25         return  res;
    26     }
    27 
    28     void buildvector(TreeNode* root, int depth)
    29     {
    30         if (root == NULL) return;
    31         if (res.size() == depth)
    32         {
    33             res.push_back(vector<int>());
    34         }
    35 
    36         res[depth].push_back(root->val);
    37         buildvector(root->left, depth + 1);
    38         buildvector(root->right, depth + 1);
    39     }
    40 };
    41 
    42 
    43 
    44 void creatTree(TreeNode* &T)
    45 {
    46     int data;
    47     cin >> data;
    48     if (data == -1)
    49     {
    50         T = NULL;
    51     }
    52     else
    53     {
    54         T = (TreeNode*)malloc(sizeof(TreeNode));
    55         T->val = data;
    56         creatTree(T->left);
    57         creatTree(T->right);
    58     }
    59 }
    60 
    61 int _tmain(int argc, _TCHAR* argv[])
    62 {
    63     TreeNode* root = NULL;
    64     creatTree(root);
    65     vector<vector<int> > res;
    66     MyClass solution;
    67     res = solution.levelOrder(root);
    68     int n = res.size();
    69     for (int i = 0; i < n; i++)
    70     {
    71         int m = res[i].size();                //注意vector<vector<int> >的输出,以及size是怎么设定 
    72         for (int j = 0; j < m; j++)
    73         {
    74             cout << res[i][j] << " ";
    75         }
    76         cout << endl;                        //输出格式
    77     }
    78     system("pause");
    79     return 0;
    80 }
      3
       / 
      9  20
        /  
       15   7
    上面的树,在本题作为输入为(3 9 -1 -1 20 15 -1 -1 7 -1 -1)
    -1代表后面没有子节点。
  • 相关阅读:
    Linux 下使用gettimeofday函数时已添加time.h后,还是报找不到gettimeofday函数问题
    记录linux编译opencv时报错: relocation R_X86_64_PC32 against symbol `XXXX' can not be used when making a shared object; recompile with fPIC
    记录Linux 没有声音/Gnome 没有声音输出设备问题
    c#抓屏(截屏)
    抽象类与接口区别 (收集)
    种方式遍历repeater中的CheckBox全选
    .net 发送电子邮件
    Repeater 双向排序
    通过SessionID和用户名来保证同一个用户不能同时登录
    ASP.NET页面刷新方法总结
  • 原文地址:https://www.cnblogs.com/zhuzhu2016/p/5614307.html
Copyright © 2020-2023  润新知