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

题目考察的知识点

这道题目是关于二叉树展开为链表的问题。题目要求将二叉树按照中序遍历的顺序展开成链表,其中左子树为空,右子树指向链表的下一个结点。

题目解答方法的文字分析

题目给出了一个函数 flattenII(root),其中 root 是二叉树的根节点。首先判断根节点是否为空,若为空则直接返回 null。然后定义一个数组 arr,用于保存二叉树中序遍历的结果。

接着调用辅助函数 inOrder(root, arr) 进行中序遍历,将遍历结果保存在数组 arr 中。中序遍历的过程是先递归遍历左子树,然后将当前节点的值加入数组 arr,最后递归遍历右子树。

完成中序遍历后,创建一个新的链表头节点 head,值为数组 arr 的第一个元素。然后使用一个临时指针 temp 指向头节点,从数组的第二个元素开始遍历数组。对于每个元素,创建一个新的节点 node,将其值设为当前元素,然后将 temp 的右指针指向新节点 node,并更新 temp 指向新节点。

最后返回链表的头节点 head

至于代码中的 TreeNode,它表示二叉树的节点,可能是题目中给出的数据结构,具体实现可以参考题目提供的代码。

本题解析所用的编程语言

本题的解析使用了JavaScript作为编程语言。

完整且正确的编程代码

function flattenII(root) {
    // write code here
    if (!root) return null;
    let arr = [];
    inOrder(root, arr);

    let head = new TreeNode(arr[0]);
    let temp = head;
    for (let i = 1; i < arr.length; i++) {
        let node = new TreeNode(arr[i]);
        temp.right = node;
        temp = node;
    }
    return head;
}
function inOrder(root, arr) {
    if (root) {
        inOrder(root.left, arr);
        arr.push(root.val);
        inOrder(root.right, arr);
    }
}
题解 | 前端刷题 文章被收录于专栏

题目考察的知识点 题目解答方法的文字分析 本题解析所用的编程语言 完整且正确的编程代码

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务