题干
原题网址:
https://leetcode.com/problems/find-bottom-left-tree-value/description/
难度
中等(Medium)
知识点
树的遍历、二叉树
题干解析
给你一棵二叉树,要你找出底层(深度最深)的子节点中最左边的那一个值。
解题思路
首先,要找到最底层的树节点,我们需要一个标志告诉我们现在遍历的树节点是第几层,所以我选择在遍历函数的参数那里加入一个代表此树节点的层数的参数,并定义一个全局变量表示目前遍历到的最深的树的层数(都是从1算起),只有当目前节点的层数大于已经遇到的最深的树的层数才会被考虑。
由于要获取最左边的数值,所以我们在遍历时,只要保证同一层的树节点,左边的比右边的优先搜索到就可以了。我的代码采用的是深度优先搜索(广度优先搜索也是可以的),先序遍历法(即中、左、右的顺序),当然,中序遍历(左、中、右顺序)和后序遍历(左、右、中顺序)也都是可以的。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
int ans, deep_floor; // 分别代表答案、目前访问到的最深层数
class Solution {
public:
void find(TreeNode *root, int floor) { // 深度优先先序遍历,用于递归~
if (root != NULL) {
if (floor > deep_floor) {
ans = root->val;
deep_floor = floor;
}
find(root->left, floor + 1);
find(root->right, floor + 1);
}
}
int findBottomLeftValue(TreeNode* root) {
if (root != NULL) { // 先初始化一个值
ans = root->val;
deep_floor = 1;
}
find(root, 1); // 开始遍历
return ans;
}
};