《剑指 Offer》专项突破版 - 面试题 45 和 46 : 二叉树最低层最左边的值和二叉树的右侧视图(C++ 实现)

目录

面试题 45 : 二叉树最低层最左边的值

面试题 46 : 二叉树的右侧视图


 


面试题 45 : 二叉树最低层最左边的值

题目

如何在一棵二叉树中找出它最低层最左边节点的值?假设二叉树中最少有一个节点。例如,在下图所示的二叉树中最低层最左边一个节点的值是 5。

分析

这是一个关于二叉树的问题,而且还与二叉树的层相关,因此基本可以确定这个题目是在考查二叉树的广度优先搜索。通常,广度优先搜索算法是从上到下遍历二叉树的每一层,并且从左到右遍历同一层中的每个节点。位于某一层最左边的节点就是该层中第 1 个遍历到的节点,最低层最左边的节点就是最后一层的第 1 个节点

可以用一个变量 bottomLeft 来保存每一层最左边的节点值。在遍历二叉树时,每当遇到新的一层时就将变量 bottomLeft 的值更新为该层第 1 个节点的值。当整棵二叉树都被遍历完之后,变量 bottomLeft 的值就是最后一次更新的值,也就是最后一层的第 1 个节点的值

代码实现

class Solution {
public:
    int findBottomLeftValue(TreeNode* root) {
        queue<TreeNode*> q;
        q.push(root);  // 二叉树中最少有一个节点
        int curLevelSize = 1;
        int bottomLeft = root->val;
        while (curLevelSize)
        {
            while (curLevelSize--)
            {
                TreeNode* front = q.front();
                q.pop();
                if (front->left)
                    q.push(front->left);
                
                if (front->right)
                    q.push(front->right);
            }
            curLevelSize = q.size();
            if (curLevelSize != 0)
                bottomLeft = q.front()->val;
        }
        return bottomLeft;
    }
};


面试题 46 : 二叉树的右侧视图

题目

给定一棵二叉树,如果站在该二叉树的右侧,那么从上到下看到的节点构成二叉树的右侧视图。例如,下图中二叉树的右侧视图包含节点 8、节点 10 和节点 7。请写一个函数返回二叉树的右侧视图节点的值。

分析

这个题目提出了一个新概念,即二叉树的右侧视图。当站在二叉树的右侧时,看到的应该是每层最右边的一个节点,而每层的其他节点都被最右边的节点挡住。因此,二叉树的右侧视图其实就是从上到下每层最右边的节点

代码实现

class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        vector<int> result;
        if (root == nullptr)
            return result;
        
        queue<TreeNode*> q;
        q.push(root);
        int curLevelSize = 1;
        while (curLevelSize)
        {
            while (curLevelSize--)
            {
                TreeNode* front = q.front();
                q.pop();
                if (curLevelSize == 0)
                    result.push_back(front->val);
​
                if (front->left)
                    q.push(front->left);
​
                if (front->right)
                    q.push(front->right);
            }
            curLevelSize = q.size();
        }
        return result;
    }
};
 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-15 09:48:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-15 09:48:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-15 09:48:02       87 阅读
  4. Python语言-面向对象

    2024-02-15 09:48:02       96 阅读

热门阅读

  1. 【Springboot】参数校验 spring-boot-starter-validation

    2024-02-15 09:48:02       56 阅读
  2. 突破编程_C++_面试(基础知识(14))

    2024-02-15 09:48:02       48 阅读
  3. Junit

    Junit

    2024-02-15 09:48:02      47 阅读
  4. Ngnix常用配置及和基本功能讲解

    2024-02-15 09:48:02       55 阅读
  5. whisperspeech 英文TTS的实现

    2024-02-15 09:48:02       46 阅读
  6. Linux命令速查表:简洁高效,一表掌握

    2024-02-15 09:48:02       51 阅读