Leetcode 515. Find Largest Value in Each Tree Row

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]



 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     vector<int> largestValues(TreeNode* root) {
13         vector<int> ret;  // 存放结果值
14         if(root == nullptr)
15         {
16             return ret;    // 如果根节点指向空指针,则返回空。
17         }
18         dfs(root,0,ret);   //调用深度优先搜索函数,先序遍历搜索
19         return ret;
20     }
21 private:  
22     void dfs(const TreeNode* root, const int depth, vector<int> &res)// 深度优先搜索
23     {
24         if (root == nullptr)
25            return;                //如果是叶节点则返回
26         if (depth == res.size())  //如果此时的树深等于ret的长度,则将节点的值添加进去
27         {
28              res.push_back(root->val);
29         }
30         else//如果此时的深度不等于res的长度,说明这一层已经写进入过值,所以要进行比较
31         {
32             res[depth] = max(res[depth], root->val);
33         }
34         dfs(root->left, depth + 1, res);
35         dfs(root-> right, depth + 1, res);
36     }
37 };

 有几点需要注意的:

1. 深度优先搜索时的参数,depth是实参调用,每次函数里边的值是不改变上一层中的值,而根节点指针和结果res都是会变化的,res的长度是 引用传参。

2. 此时为先序遍历

 

posted @ 2017-04-15 10:30  爱简单的Paul  阅读(197)  评论(0编辑  收藏  举报