题目大意
给定一个二叉树,求最深一层的最左节点值。
分析
首先我们需要先进行一轮DFS去求解这个二叉树的最大深度,然后再进行深搜,按照先左后右的顺序,当搜索到第一个处于最大深度处的节点时返回答案。
代码
int max_depth, ans;
bool isVis;
void check_depth(int depth, TreeNode* root) { //计算最大深度
if(root == NULL) {
return;
}
if(root -> left == NULL && root -> right == NULL) {
max_depth = max(max_depth, depth);
return;
}
check_depth(depth + 1, root -> left);
check_depth(depth + 1, root -> right);
}
void dfs(TreeNode* root, int depth) {
if(isVis || root == NULL) {
return;
}
if(root -> left == NULL && root -> right == NULL && depth == max_depth) {
ans = root -> val;
isVis = true; //找到了目标解,利用isVis减少不必要的搜索
return;
}
dfs(root -> left, depth + 1);
dfs(root -> right, depth + 1);
}
int findBottomLeftValue(TreeNode* root) {
check_depth(0, root);
dfs(root, 0);
return ans;
}