LeetCode 515 Find Largest Value in Each Tree Row(二叉树层序遍历)

来源:互联网 发布:免费的经济数据库软件 编辑:程序博客网 时间:2024/06/06 04:38

You need to find the largest value in each row of a binary tree.

Example:

Input:           1         / \        3   2       / \   \        5   3   9 Output: [1, 3, 9]

题目大意:给出一棵二叉树,求出每一层的最大值。

解题思路:利用层序遍历求出每一层的元素,然后找到最大值即可。

代码如下:

/** * 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<int> largestValues(TreeNode* root) {        //largestValues(root, ans);        largestValues(root, 0, ans);        return ans;    }private:    queue<TreeNode*> que;    vector<int> ans;        //非递归版本    void largestValues(TreeNode* root, vector<int>& ans) {        if(root == nullptr) return ;        int cur = 0;        TreeNode* tmp;        que.push(root);        while(cur < que.size()){            int last = que.size();            int max = INT_MIN;            while(cur++ < last){                tmp = que.front();                que.pop();                if(max < tmp->val) max = tmp->val;                if(tmp->left) que.push(tmp->left);                if(tmp->right) que.push(tmp->right);            }            cur = 0;            ans.push_back(max);        }    }        //递归版本    void largestValues(TreeNode* root, int depth, vector<int>& ans) {        if(root == nullptr) return;        if(ans.size() == depth)ans.push_back(INT_MIN);        ans[depth] = (max(root->val, ans[depth]));        largestValues(root->left, depth + 1, ans);        largestValues(root->right, depth + 1, ans);    }};

阅读全文
0 0
原创粉丝点击