LeetCode 102. Binary Tree Level Order Traversal

来源:互联网 发布:mac好用的音乐播放器 编辑:程序博客网 时间:2024/06/02 04:01

题目

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   7return its level order traversal as:[  [3],  [9,20],  [15,7]]

思考

即树的遍历,加上对层数的标记。

答案

c++
广度优先搜索:把树用vector保存下来,包括NULL,然后根据二叉树的序号规律划分层次存入结果中。

/** * Definition for a binary tree node. * 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<TreeNode*> temp;        temp.push_back(root);        for (int i = 0; i < temp.size(); i++) {            if (temp[i] != NULL) {                temp.push_back(temp[i]->left);                temp.push_back(temp[i]->right);             }        }        int currentIndex = 0, level = 0;        vector<vector<int>>* result = new vector<vector<int>>;        while (currentIndex < temp.size()) {            // each level            vector<int>* a = new vector<int>;            for (int i = 0; i < pow(2, level); i++, currentIndex++) {                if (temp[currentIndex] != NULL) {                    a->push_back(temp[currentIndex]->val);                }            }            if (a->size() != 0) result->push_back(*a);            vector<int>().swap(*a);            level++;        }        return *result;    }};

深度优先搜索

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<vector<int>> ret;    void buildVector(TreeNode *root, int depth)    {        if(root == NULL) return;        if(ret.size() == depth)            ret.push_back(vector<int>());        ret[depth].push_back(root->val);        buildVector(root->left, depth + 1);        buildVector(root->right, depth + 1);    }    vector<vector<int> > levelOrder(TreeNode *root) {        buildVector(root, 0);        return ret;    }};
原创粉丝点击