LeetCode OJ:Binary Tree Level Order Traversal

来源:互联网 发布:sql order by limit 1 编辑:程序博客网 时间:2024/05/18 03:26

Binary Tree Level Order Traversal

 

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,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its level order traversal as:

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

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

算法思想:层序遍历

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<vector<int> > levelOrder(TreeNode *root) {        vector<vector<int>> result;          if(!root)return result;          vector<int> t;          int curLev=1;          int nextLev=0;          queue<TreeNode *> que;          que.push(root);          while(!que.empty()){              TreeNode *cur=que.front();              que.pop();              t.push_back(cur->val);            if(cur->left){                  nextLev++;                  que.push(cur->left);              }              if(cur->right){                  nextLev++;                  que.push(cur->right);              }              if(--curLev==0){                  result.push_back(t);                  t.clear();                  curLev=nextLev;                  nextLev=0;              }          }          return result;      }};

递归版

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<vector<int> > levelOrder(TreeNode *root) {        vector<vector<int>> result;        traverse(root,1,result);        return result;    }    void traverse(TreeNode *root,size_t level,vector<vector<int>> &result){        if(!root)return;        if(level>result.size())            result.push_back(vector<int>());        result[level-1].push_back(root->val);        traverse(root->left,level+1,result);        traverse(root->right,level+1,result);    }};



0 0
原创粉丝点击