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。

这道题考察了二叉树的遍历和链表的操作知识点。

代码解释如下:

  1. 首先定义了一个结构体 TreeNode,表示二叉树节点。每个节点包含一个整数值 val,以及左子节点 left 和右子节点 right。
  2. 然后定义了一个类 Solution,其中包含了 flattenII 方法。
  3. flattenII 方法接收一个二叉树的根节点 root 作为参数。首先判断根节点是否为空,如果为空则直接返回空。
  4. 创建一个数组 v,用来保存中序遍历的结果。
  5. 调用辅助方法 dfs 进行中序遍历,将节点添加到数组 v 中。
  6. 获取数组 v 的长度 n。
  7. 使用循环遍历数组 v,从索引1开始。在循环中,将前一个节点的右子节点指向当前节点,并将前一个节点的左子节点置为空。
  8. 将最后一个节点的左子节点和右子节点都置为空,即形成了展开后的链表。
  9. 返回数组 v 的第一个节点作为结果。

该代码实现了将二叉树展开为链表的功能。通过中序遍历二叉树获取节点的顺序,并根据节点的顺序修改节点的左右子节点,将二叉树展开为链表。最终得到的链表是以原二叉树的中序遍历顺序展开的。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务