【每日一题】114. 二叉树展开为链表 (前序遍历)

110 阅读1分钟

这道题目的话,首先是用前序遍历遍历每一个点,接着的话,是通过新建一个右节点,把当前的值放进去。

给你二叉树的根结点 root ,请你将它展开为一个单链表:

展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。

展开后的单链表应该与二叉树 先序遍历 顺序相同。

 

示例 1:

输入:root = [1,2,5,3,4,null,6]

输出:[1,null,2,null,3,null,4,null,5,null,6]

示例 2:

输入:root = []

输出:[]

示例 3:

输入:root = [0]

输出:[0]

 

提示:

树中结点数在范围 [0, 2000] 内

-100 <= Node.val <= 100

来源:力扣(LeetCode)

链接:leetcode-cn.com/problems/fl…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {void} Do not return anything, modify root in-place instead.
 */
var flatten = function(root) {
    //是进行先序遍历然后把先序遍历的值都放入到一个二叉树的一边
    //让每一次的右边的值,都等于先序遍历的值,然后就可以实现链表 21点36分
    //21点39分 理解错了,我以为是新建的,想不到是在原来的基础上进行修改的
    //
    var res = new TreeNode()
    var cur_res = res
    if(!root) return root
    var shenru = function(root){
        if(!root) return
        cur_res.val = root.val
        if(root.left){
            let tem = new TreeNode()
            cur_res.right = tem
            cur_res = cur_res.right
            shenru(root.left)
        }
        if(root.right){
            let tem = new TreeNode()
            cur_res.right = tem
            cur_res = cur_res.right            
            shenru(root.right)
        }
    }
    shenru(root)
    //21点44分 这里的话,是想办法接了一个尾巴,哈哈,有点搞笑
    //21点49分 完成 
    root.left = null
    root.right = null
    root.right = res.right
    root = root.right
};