大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

二叉树的中序遍历,叶子节点的判断和保存。

题目解答方法的文字分析

我们需要找出从下方仰视二叉树时能看到的牛的编号,按照从左到右的顺序返回。这个问题可以通过中序遍历来解决,因为中序遍历会按照从左到右的顺序遍历二叉树。具体的步骤如下:

  1. 我们可以编写一个递归函数 inorderTraversal,它接收一个根节点和一个结果数组作为参数。
  2. inorderTraversal 函数中,首先递归遍历根节点的左子树。
  3. 如果当前节点是叶子节点(即没有左右子节点),将其值保存在结果数组中。
  4. 递归遍历根节点的右子树。
  5. 最终返回结果数组,它就是仰视图的顺序。

本题解析所用的编程语言

C++

完整且正确的编程代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    vector<int> bottomView(TreeNode* root) {
        vector<int> result;
        // 调用递归函数,得到仰视图的顺序
        inorderTraversal(root, result);
        return result;
    }
    
    // 递归函数:中序遍历,并保存叶子节点的值
    void inorderTraversal(TreeNode* root, vector<int>& result) {
        if (!root) {
            return;
        }
        
        // 递归遍历左子树
        inorderTraversal(root->left, result);
        
        // 如果是叶子节点,保存其值到结果数组
        if (!root->left && !root->right) {
            result.push_back(root->val);
        }
        
        // 递归遍历右子树
        inorderTraversal(root->right, result);
    }
};

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!