Java 题解 | #牛群的树形结构展开II#
牛群的树形结构展开II
https://www.nowcoder.com/practice/3e89ca58f76d4e6aa44cf29569017410
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类 */ ArrayList<TreeNode> v = new ArrayList<>(); public TreeNode flattenII (TreeNode root) { // write code here if (root == null) return null; dfs(root); int n = v.size(); for (int i = 1; i < n; i++) { v.get(i - 1).right = v.get(i); v.get(i - 1).left = null; } v.get(n - 1).left = null; v.get(n - 1).right = null; return v.get(0); } public void dfs(TreeNode root) { if (root == null) return; dfs(root.left); v.add(root); dfs(root.right); } }
该代码使用的编程语言是Java。
这道题考察了二叉树的遍历和链表的操作知识点。
代码解释如下:
- 首先定义了一个结构体 TreeNode,表示二叉树节点。每个节点包含一个整数值 val,以及左子节点 left 和右子节点 right。
- 然后定义了一个类 Solution,其中包含了 flattenII 方法。
- flattenII 方法接收一个二叉树的根节点 root 作为参数。首先判断根节点是否为空,如果为空则直接返回空。
- 创建一个数组 v,用来保存中序遍历的结果。
- 调用辅助方法 dfs 进行中序遍历,将节点添加到数组 v 中。
- 获取数组 v 的长度 n。
- 使用循环遍历数组 v,从索引1开始。在循环中,将前一个节点的右子节点指向当前节点,并将前一个节点的左子节点置为空。
- 将最后一个节点的左子节点和右子节点都置为空,即形成了展开后的链表。
- 返回数组 v 的第一个节点作为结果。
该代码实现了将二叉树展开为链表的功能。通过中序遍历二叉树获取节点的顺序,并根据节点的顺序修改节点的左右子节点,将二叉树展开为链表。最终得到的链表是以原二叉树的中序遍历顺序展开的。