题解 | #牛群的树形结构展开II#

牛群的树形结构展开II

https://www.nowcoder.com/practice/3e89ca58f76d4e6aa44cf29569017410

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

题目考察的知识点

这道题目考察了二叉树的中序遍历和链表操作。需要将一个二叉树按照中序遍历的顺序展开成一个链表,其中左子树为空,右子树指向链表中的后一个节点。

题目解答方法的文字分析

解决这道题的关键在于中序遍历二叉树,同时将遍历的节点按照顺序串联起来,形成一个链表。

  1. 首先,我们创建一个哑节点作为链表的起始点,并创建一个指针 prev 指向这个哑节点。这样我们就能在遍历过程中不断地将节点接在 prev 的后面。
  2. 使用中序遍历的方式遍历二叉树。对于每个节点,先递归处理左子树,然后将当前节点接在 prev 的右侧,左子树置为空,更新 prev 为当前节点,最后递归处理右子树。
  3. 最后,返回哑节点的右子树,即为展开后的链表。

思路示例:

考虑以下二叉树:

     4
    / \
   2   6
  / \   \
 1   3   5

我们按照中序遍历的顺序展开,得到链表:1 -> 2 -> 3 -> 4 -> 5 -> 6

本题解析所用的编程语言

本题解析所用的编程语言是 C++。

完整且正确的编程代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    TreeNode* flattenII(TreeNode* root) {
        if (!root) {
            return nullptr;
        }
        
        TreeNode* dummy = new TreeNode(-1); // 创建一个哑节点作为链表的起始点
        TreeNode* prev = dummy;
        
        inorderFlatten(root, prev); // 中序遍历展开二叉树
        
        TreeNode* flattened = dummy->right;
        delete dummy; // 删除哑节点
        
        return flattened;
    }
    
    void inorderFlatten(TreeNode* node, TreeNode*& prev) {
        if (!node) {
            return;
        }
        
        inorderFlatten(node->left, prev); // 递归展开左子树
        
        prev->right = node; // 当前节点接在前一个节点的右侧
        prev->left = nullptr; // 左子树置为空
        
        prev = node; // 更新前一个节点为当前节点
        
        inorderFlatten(node->right, prev); // 递归展开右子树
    }
};

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

阿Q的题解 文章被收录于专栏

阿Q秋招刷过的题

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
3136次浏览 43人参与
# HR最不可信的一句话是__ #
1014次浏览 32人参与
# 米连集团26产品管培生项目 #
7062次浏览 224人参与
# 春招至今,你的战绩如何? #
14766次浏览 137人参与
# AI面会问哪些问题? #
890次浏览 22人参与
# 你的实习产出是真实的还是包装的? #
2704次浏览 52人参与
# 巨人网络春招 #
11484次浏览 224人参与
# 沪漂/北漂你觉得哪个更苦? #
1209次浏览 38人参与
# 你做过最难的笔试是哪家公司 #
1123次浏览 20人参与
# AI时代,哪个岗位还有“活路” #
2675次浏览 49人参与
# XX请雇我工作 #
51147次浏览 171人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7965次浏览 43人参与
# 简历第一个项目做什么 #
32067次浏览 357人参与
# 简历中的项目经历要怎么写? #
310896次浏览 4257人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152823次浏览 888人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187553次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64520次浏览 864人参与
# 如果重来一次你还会读研吗 #
229971次浏览 2011人参与
# 投格力的你,拿到offer了吗? #
178239次浏览 891人参与
# 你怎么看待AI面试 #
180643次浏览 1295人参与
# 正在春招的你,也参与了去年秋招吗? #
364158次浏览 2641人参与
# 腾讯音乐求职进展汇总 #
160820次浏览 1114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务