题目描述:
Given a binary tree, find the leftmost value in the last row of the tree.
解题思路
首先考虑用BFS还是DFS,使用BFS遍历树,可以找到树的最底边最右边的节点,但是找不到最左边的节点。如果使用DFS,则每一行首先遍历到的节点一定是该行最左边的节点。可以利用这个属性,再记录下每行的行数,则可以得出结果。
解题代码如下:
class Solution {
public:
void findBottomLeftValue(TreeNode* root, int& maxDepth, int& leftVal, int depth) {
if (root == NULL) {
return;
}
//Go to the left and right of each node
findBottomLeftValue(root->left, maxDepth, leftVal, depth+1);
findBottomLeftValue(root->right, maxDepth, leftVal, depth+1);
//Update leftVal and maxDepth
if (depth > maxDepth) {
maxDepth = depth;
leftVal = root->val;
}
}
//Entry function
int findBottomLeftValue(TreeNode* root) {
int maxDepth = 0;
//Initialize leftVal with root's value to cover the edge case with single node
int leftVal = root->val;
findBottomLeftValue(root, maxDepth, leftVal, 0);
return leftVal;
}
};