- 描述: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
- 分析:这道题是寻找最底左树节点的值,题目本身实现并不困难。
- 思路一:用BFS算法层层便利去寻找最底左树的值。
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
int val = 0;
queue<TreeNode*> my_queue;
my_queue.push(root);
while (!my_queue.empty()) {
int n = my_queue.size();
for (int i = 0; i < n; i++) {
TreeNode* temp = my_queue.front();
my_queue.pop();
if (i == 0) val = temp -> val;
if (temp -> left) my_queue.push(temp -> left);
if (temp -> right) my_queue.push(temp -> right);
}
}
return val;
}
};
- 思路二:用递归的方式实现,这种方法更想树的遍历一点,在遍历一棵数的过程中找到最底左树的值。
class Solution {
public:
void findBottomLeftValue(TreeNode* root, int& maxDepth, int& leftVal, int depth) {
if (!root) return;
if (depth > maxDepth) {
maxDepth = depth;
leftVal = root->val;
}
findBottomLeftValue(root->left, maxDepth, leftVal, depth+1);
findBottomLeftValue(root->right, maxDepth, leftVal, depth+1);
}
int findBottomLeftValue(TreeNode* root) {
if (!root) return 0;
int maxDepth = 0;
int leftVal = root->val;
findBottomLeftValue(root, maxDepth, leftVal, 0);
return leftVal;
}
};