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 的第一个节点作为结果。
该代码实现了将二叉树展开为链表的功能。通过中序遍历二叉树获取节点的顺序,并根据节点的顺序修改节点的左右子节点,将二叉树展开为链表。最终得到的链表是以原二叉树的中序遍历顺序展开的。
