力扣 513 找树左下角的值【层序遍历】

力扣 513 找树左下角的值

全部刷题与学习记录

【C++刷题学习笔记目录】

【C++百万并发网络通信-笔记目录】

原题目

题目地址:513. 找树左下角的值

给定一个二叉树,在树的最后一行找到最左边的值。

示例 1:

输入:

    2
   / \
  1   3

输出:
1

示例 2:

输入:

        1
       / \
      2   3
     /   / \
    4   5   6
       /
      7

输出:
7

考查知识点

层序遍历

自己的第一遍解法

这道题思路比较直接,层序遍历后输出最后一个数组的第一个数字就行,相当于温习一遍层序遍历

#include <iostream>
#include <queue>
using namespace std;

struct TreeNode {
    
    
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {
    
    }
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {
    
    }
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {
    
    }
};

class Solution {
    
    
public:
    int findBottomLeftValue(TreeNode* root) {
    
    
        queue<TreeNode*> que;//节点队列
        que.push(root);
        vector<vector<int>> res;

        while (!que.empty()) {
    
    
            vector<int> path;
            int size = que.size();

            for (int i = 0; i < size; ++i) {
    
    //每次取出队列中所有节点,对应二叉树的某一层全部节点,再将该层所有子节点全部插入队列
                TreeNode* qFront = que.front();
                path.push_back(qFront->val);
                if (qFront->left)   que.push(qFront->left);
                if (qFront->right)  que.push(qFront->right);
                que.pop();
            }
            res.push_back(path);
        }
        return res[res.size()-1][0];
    }
};

int main() {
    
    
    TreeNode x2(2), x1(1), x3(3);
    x2.left = &x1;
    x2.right = &x3;
    Solution so;
    cout << so.findBottomLeftValue(&x2);
}

好的解法

【代码随想录】大佬给出了另一种使用回溯的解法,思路:遍历二叉树的所有节点,维护一个最大深度记录,并保存最大深度记录对应的节点

二叉树:我的左下角的值是多少?

猜你喜欢

转载自blog.csdn.net/weixin_44484715/article/details/115385032