题目:
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.
思路:
遇到树的问题,一般都要想着用DFS或者BFS,除非题目明确说明不允许。在本题目中,我们首先计算左子树的高度以及右子树的高度,如果右子树的高度大于左子树的高度,那么就返回右子树最左下的结点的值;否则就返回左子树最左下的结点的值。当然需要注意结点如果是叶子结点的特殊情况,这是递归的基础。
代码:
/**
* 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 height = 0;
return findBottomLeftValue(root, height);
}
private:
int findBottomLeftValue(TreeNode* root, int &height) {
if (!root->left && !root->right) { // a leaf
height = 1;
return root->val;
}
else {
int max_height = 0, value = 0;
if (root->left) {
value = findBottomLeftValue(root->left, max_height);
}
if (root->right) {
int right_height = 0;
int right_value = findBottomLeftValue(root->right, right_height);
if (right_height > max_height) {
max_height = right_height;
value = right_value;
}
}
height = max_height + 1;
return value;
}
}
};