给定一个二叉树,在树的最后一行找到最左边的值。
层序遍历最为简单,但是递归法也得了解。
层序遍历记录最后一行的第一个节点的数值。
层序遍历
- class Solution {
- public:
- int findBottomLeftValue(TreeNode* root) {
- queue
que; - if (root != NULL) que.push(root);
- int result = 0;
- while (!que.empty()) {
- int size = que.size();
- for (int i = 0; i < size; i++) {
- TreeNode* node = que.front();
- que.pop();
- if (i == 0) result = node->val; // 记录最后一行第一个元素
- if (node->left) que.push(node->left);
- if (node->right) que.push(node->right);
- }
- }
- return result;
- }
- };
根据 i == 0可得最左边的值。
1. 递归参数和返回值
参数要有传入的根节点和int型的变量记录深度,返回值为空。
2. 终止条件
遇到叶子节点,更新最大深度。
3. 单层逻辑
在找最大深度的时候,递归过程任需使用回溯。
- class Solution {
- public:
- int maxDepth = INT_MIN;
- int result;
- void traversal(TreeNode* root, int depth) {
- if (root->left == NULL && root->right == NULL) {
- if (depth > maxDepth) {
- maxDepth = depth;
- result = root->val;
- }
- return;
- }
- if (root->left) {
- depth++;
- traversal(root->left, depth);
- depth--; // 回溯
- }
- if (root->right) {
- depth++;
- traversal(root->right, depth);
- depth--; // 回溯
- }
- return;
- }
- int findBottomLeftValue(TreeNode* root) {
- traversal(root, 0);
- return result;
- }
- };