1. 程式人生 > >[LeetCode] 515. Find Largest Value in Each Tree Row

[LeetCode] 515. Find Largest Value in Each Tree Row

Find Largest Value in Each Tree Row

You need to find the largest value in each row of a binary tree.
這裡寫圖片描述

解析

找到每一層的最大節點值。

解法1:層序遍歷

直接層次遍歷每一層,獲得最大值。

class Solution {
public:
    vector<int> largestValues(TreeNode* root) {
        vector<int> res;
        if(!root) return res;
        queue
<TreeNode*>
q; q.push(root); while(!q.empty()){ int size = q.size(); int m = INT_MIN; for(int i=0;i<size;i++){ TreeNode* p = q.front(); q.pop(); m = max(m, p->val); if(p->left) q.push(p->left); if
(p->right) q.push(p->right); } res.push_back(m); } return res; } };

解法2:遞迴,DFS

深度搜索樹,當res大小等於深度時,增加res節點,當小於時,直接比較取最大值。

class Solution {
public:
    vector<int> largestValues(TreeNode* root) {
        vector<int> res;
        DFS(root, 0
, res); return res; } void DFS(TreeNode* root, int level, vector<int>& res){ if(!root) return; if(res.size() == level) res.push_back(root->val); else res[level] = max(res[level], root->val); DFS(root->left, level+1, res); DFS(root->right, level+1, res); } };

參考

http://www.cnblogs.com/grandyang/p/6417826.html