JZ045:二叉树最底层最左边的值

📃 题目描述

题目链接:二叉树最底层最左边的值相同的题目

image-20220511214624302

🔔 解题思路

方法一:采用队列进行层次遍历,每次将每层的第一个值放保存在答案,遍历完该二叉树,那必然就是最底层最左边的节点;

方法二:方法一中的需要消耗o(n)的空间,想一下,有没有不需要消耗这个空间呢,采用dfs(但是实际dfs递归栈也消耗o

(logn)的空间复杂度)

class Solution {
public:
    vector<int> res = vector<int>(2, 0); // res[0]保存答案,res[1]保存该答案所在的深度
    int findBottomLeftValue(TreeNode* root) {
        res[0] = root->val;
        backTracking(root, 0);
        return res[0];
    }
    void backTracking(TreeNode* root, int level) {
        if (root->left == nullptr && root->right == nullptr ) { //判断是否为叶子节点
            if (level > res[1]) {
                res[0] = root->val;
                res[1] = level;
            }
            return;
        }

        if (root->left) backTracking(root->left, level + 1);
        if (root->right) backTracking(root->right, level + 1);
    }
};

💥 复杂度分析

  • 时间复杂度:o(n);
  • 空间复杂度:O(logn);
posted @ 2022-05-11 21:57  D-booker  阅读(128)  评论(0编辑  收藏  举报