第十四周作业:
513. Find Bottom Left Tree Value
解题思路:
513. Find Bottom Left Tree Value
Given a binary tree, find the leftmost value in the last row of the tree.
Example 1:
Input: 2 / \ 1 3 Output: 1
Example 2:
Input: 1 / \ 2 3 / / \ 4 5 6 / 7 Output: 7
Note: You may assume the tree (i.e., the given root node) is not NULL.
思路:判断一个二叉树最左下层的元素的值。采用递归的算法是一个比较好的办法,但是我们需要一个变量来记录当前的层数,同时也需要一个全局变量来记录当前所遍历的最深层数是多少。如果满足两个条件,是当前为止最深的层并且是左边元素,则记录下当前的元素值。如果再后续的遍历中获得了新的合适的值,再去替换它。
代码如下:
/**
* 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 findBottomLeftValue(TreeNode* root) {
int result = 0, max_depth = 0;
findBottomLeftValueHelper(root, 0, &max_depth, &result);
return result;
}
private:
void findBottomLeftValueHelper(TreeNode *root, int curr_depth, int *max_depth, int *bottom_left_value) {
if (!root) {
return;
}
if (!root->left && !root->right &&
curr_depth + 1 > *max_depth) {
*max_depth = curr_depth + 1;
*bottom_left_value = root->val;
return;
}
findBottomLeftValueHelper(root->left, curr_depth + 1, max_depth, bottom_left_value);
findBottomLeftValueHelper(root->right, curr_depth + 1, max_depth, bottom_left_value);
}
};