LeetCode 513. Find Bottom Left Tree Value 解题报告

LeetCode 513. Find Bottom Left Tree Value 解题报告

题目描述

Given a binary tree, find the leftmost value in the last row of the tree.


示例

example 1:
example1

example 2:
example2


注意事项

You may assume the tree (i.e., the given root node) is not NULL.


解题思路

我的思路:

题目问的是树最底层最左边的叶子节点的值,乍眼一看似乎挺复杂,其实不然。
首先为了找到该节点肯定需要遍历树,同时设置两个全局变量分别记录到达的层数和最左节点值。在遍历过程中每个节点都将访问一次,搜索方式是dfs,因为深度搜索时每层最左边的节点都是该层第一个被访问的节点,所以当访问到该节点时,节点层数会比记录的层数要大,这样就能知道此时找到的是某一层最左边的节点,因此更新最左节点值和层数,当遍历完成后,最左节点值记录就是最底层的最左叶子的值。

其他人的解法基本都是这样,不同的可能是使用广度搜索或是其他形式的搜索方式,我的实现方式是使用递归形式的dfs,见下面代码。


代码

我的代码

/**
 * 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:
    int maxDepth = 0;
    int val = 0;

    void dfs(TreeNode *root, int depth) {
        if (!root)
            return ;

        if (depth > maxDepth) {
            maxDepth = depth;
            val = root->val;
        }

        if (root->left)
            dfs(root->left, depth + 1);

        if (root->right)
            dfs(root->right, depth + 1);
    }

    int findBottomLeftValue(TreeNode* root) {
        maxDepth = 0;
        val = 0;

        dfs(root, 1);

        return val;
    }
};

总结

这道题考查的是树结构,只要知道dfs中每层最左边的节点都会是第一个被访问的就能想出这道题的解法,因为递归形式容易实现,所以采用了递归形式的dfs。
做题时需要多观察,并且注意算法在某一数据结构上表现的特性才能灵活使用算法和数据结构,这是今天的第二篇博客,还有第三篇,继续填坑去↖(^ω^)↗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值