Java 题解 | #牛群的树形结构展开#

牛群的树形结构展开

https://www.nowcoder.com/practice/07caea5438394f58afbe72cbe2eb2189

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<Integer> ans = new ArrayList<>();
    public TreeNode flattenTree (TreeNode root) {
        // write code here
        if (root == null)
            return null;
        pre(root);
        int n = ans.size();
        TreeNode root1 = new TreeNode(ans.get(0));
        TreeNode croot = root1;
        for (int i = 1; i < n; i++) {
            TreeNode node = new TreeNode(ans.get(i));
            root1.left = null;
            root1.right = node;
            root1 = node;
        }
        root1.left = null;
        root1.right = null;
        return croot;
    }

    public void pre(TreeNode root) {
        if (root == null)
            return;
        ans.add(root.val);
        pre(root.left);
        pre(root.right);
    }
}

这段代码使用的编程语言是Java。

该题考察的知识点有二叉树的遍历和链表的操作。

代码解释如下:

  1. 首先定义了一个 TreeNode 类,表示二叉树节点。每个节点包含一个整数值 val,以及左子节点 left 和右子节点 right。
  2. 然后定义了一个 Solution 类,其中包含了 flattenTree 方法。
  3. flattenTree 方法接收一个二叉树的根节点 root 作为参数。它首先判断根节点是否为空,如果为空则直接返回空。
  4. 创建一个列表 ans,用来保存前序遍历的结果。
  5. 调用辅助方法 pre 进行前序遍历,将节点的值保存到列表 ans 中。
  6. 获取列表 ans 的长度 n。
  7. 创建一个新的节点 root1,值为列表 ans 的第一个节点值。
  8. 创建一个指针 croot,指向链表的头节点。
  9. 使用循环遍历列表 ans 的剩余节点,从索引1开始。在循环中,创建一个新的节点 node,值为当前遍历到的节点值。
  10. 将当前节点 node 连接到链表中,即将 root1 的左子节点置为 null,右子节点置为 node。
  11. 更新 root1 的位置为当前节点 node,作为下一次循环时的尾部节点。
  12. 循环结束后,将 root1 的左子节点和右子节点置为 null,即形成了展开后的链表。
  13. 返回链表的头节点 croot 作为结果。

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

全部评论

相关推荐

肖先生~:那年秋招闯进一位少年,人们都清楚:成功对他来说只是时间问题
点赞 评论 收藏
分享
敢逐云霄志:你打招呼语怎么能这么长,hr都没看下去的欲望,简明扼要说重点,就读于某某学校某某专业,26届应届毕业生,学信网可查,先后在某某公司实习过(如有),然后做过什么项目,想找一份什么样的工作,可实习几个月以上,期待您的回复。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务