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.
解:
这道题略有难度,值得推敲。
总体上还是深度优先的递归,利用maxDepth记录当前已经遍历的子树节点最大到达的深度,如果depth > maxDepth不满足,则说明此刻节点已经不是更深或者最左边的节点了,这是主要的思想。
class Solution {
public:
void findBottomLeftValue(TreeNode* root, int& maxDepth, int& leftVal, int depth) {
if (root == NULL) {
return;
}
findBottomLeftValue(root->left, maxDepth, leftVal, depth+1);
findBottomLeftValue(root->right, maxDepth, leftVal, depth+1);
if(depth > maxDepth) {
maxDepth = depth;
leftVal = root -> val;
}
}
int findBottomLeftValue(TreeNode* root) {
int maxDepth = 0;
int leftVal = root->val;
findBottomLeftValue(root, maxDepth, leftVal, 0);
return leftVal;
}
};