DFS之Find Largest Value in Each Tree Row leetcode(515)

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]

题目要求输出一颗二叉树每一行的最大值。

思路:使用dfs策略,需要记录当前的深度,然后不断更新每一层的数值使之最大化。

我的代码:

class Solution {
public:
    vector<int> vec;
    vector<int> largestValues(TreeNode* root) {
        
        dfs(root, 1);
        return vec;
    }
    
    void dfs(TreeNode* node, int level)
    {
        if(node == NULL)
        {
            return;
        }
        
        if(vec.size()<level)    //如果dfs到新的层
        {
            vec.push_back(node->val);
        }
        
        int l = INT_MIN;    //记录左儿子的数值
        int r = INT_MIN;   //记录右儿子的数值
        
        if(node->left != NULL)
        {
            dfs(node->left, level+1);        //dfs左子树
            l = node->left->val;
        }


        if(node->right != NULL)
        {
            dfs(node->right, level+1);   //dfs右子树
            r = node->right->val;
        }
        vec[level] = max(max(l, r), vec[level]);
        
    }
};

大佬代码:

class Solution {
public:
    vector<int> vec;
    vector<int> largestValues(TreeNode* root) {
        
        dfs(root, 0);
        return vec;
    }
    
    void dfs(TreeNode* node, int level)
    {
        if (!node)
            return;
        
        if (level == vec.size())        //dfs到新的层
            vec.push_back(node->val);
        
        if (node->val > vec[level])    //巧妙!先比较当前节点的值和当前层的数值。
            vec[level] = node->val;
        
        dfs(node->left, level+1);
        dfs(node->right, level+1);
    }

};


总结,跟大佬的思路是一样的,但是写出来的代码截然不同。代码的编写差距比较大,我是先得到左右子树的儿子的数值,再进行比较,大佬是先比较,实际上根本没必要考虑左右儿子是否为空,因为当前层只要有数值,就可以比较,因此,先进行比较并更新的代码更简洁易读!代码层面要多实践,将思路转化为简洁易懂的代码!

猜你喜欢

转载自blog.csdn.net/u012260341/article/details/80381184