题目考察的知识点

递归函数,二叉树先序遍历的应用

题目解答方法的文字分析

通过先序遍历存储节点,随后进行链表的拼接即可完成。

本题解析所用的编程语言

使用Java代码解答

完整且正确的编程代码

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return TreeNode类
     */
    public TreeNode flattenTree (TreeNode root) {
        // write code here
        List<TreeNode> list = new ArrayList<TreeNode>();
        dfs(root, list);
        int size = list.size();
        for (int i = 1; i < size; i++) {
            TreeNode pre = list.get(i - 1), curr = list.get(i);
            pre.left = null;
            pre.right = curr;
        }
        return root;
    }
    

    public void dfs(TreeNode root, List<TreeNode> list) { //先序遍历二叉树
        if (root != null) {
            list.add(root); //存储节点
            dfs(root.left, list);
            dfs(root.right, list);
        }
    }
}