LeetCode 513. Find Bottom Left Tree Value 解题报告
题目描述
Given a binary tree, find the leftmost value in the last row of the tree.
示例
example 1:
example 2:
注意事项
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。
做题时需要多观察,并且注意算法在某一数据结构上表现的特性才能灵活使用算法和数据结构,这是今天的第二篇博客,还有第三篇,继续填坑去↖(^ω^)↗