给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:
输入: root = [2,1,3]
输出: 1
示例 2:
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7
提示:
二叉树的节点个数的范围是 [1,104]
-231 <= Node.val <= 231 - 1
#include<iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
class Solution {
public:
void dfs(TreeNode* root, int depth) {
if (root == NULL) {
return;
}
/* 查找最深的节点 */
if (depth > max) {
max = depth;
result = root->val;
}
/* 优先走最左边 */
if (root->left) {
dfs(root->left, depth + 1);
}
if (root->right) {
dfs(root->right, depth + 1);
}
}
int findBottomLeftValue(TreeNode* root) {
max = 1;
result = root->val;
dfs(root, 1);
return result;
}
private:
int max;
int result;
};
int main() {
TreeNode* r = new TreeNode(1);
r->left = new TreeNode(2);
r->left->left = new TreeNode(4);
r->right = new TreeNode(3);
r->right->left = new TreeNode(5);
r->right->right = new TreeNode(6);
r->right->left->left = new TreeNode(7);
shared_ptr<Solution> ptr = std::make_shared<Solution>();
cout << ptr->findBottomLeftValue(r) << endl;
system("pause");
return 0;
}