TreeNode实用方法

TreeNode实用方法treeToString 获取输出树节点以及所有子节点并生成字符串 convertArrTo 数组生成树

TreeNode实用方法

  因为刷题的时候经常碰到树相关的题目,但是测试的时候老不方便了,总不能每次都一个节点一个节点去new吧!当然我开始就是这么做的,后来实在是懒得写一大堆测试代码,就写了俩方法,一个根据数组生成节点,一个遍历获取节点的所有子节点,并保存为字符串。

treeToString 获取输出树节点以及所有子节点并生成字符串
convertArrToTree 数组生成树

package com.radish.leetcode.tree; import java.util.ArrayList; import java.util.List; / * @Description * @Author Radish * @Date 2020/3/13 */ public class TreeNode { 
    public int val; public TreeNode left; public TreeNode right; public TreeNode(int x) { 
    val = x; } TreeNode(int val, TreeNode left, TreeNode right) { 
    this.val = val; this.left = left; this.right = right; } / * * @param depth 当前要找的是第几层 * @param nodes */ public void getStr(int depth, List<TreeNode> nodes) { 
    int nodeCount = 0; //从头到depth-1层的元素数量 int nums = (int)Math.pow(2,depth-1) - 1; //depth-1层元素数量 int nums1 = (int)Math.pow(2,depth - 2); //第depth-1层第一个元素下标值 int i = nums - nums1; //那就不是深度优先遍历而是广度优先遍历了嗷 TreeNode node; for (; i < nums; i++) { 
    node = nodes.get(i); if (node == null) { 
    nodes.add(null);nodes.add(null); } else { 
    if ((node.left != null && (node.left.left != null || node.left.right != null)) || (node.right != null && (node.right.left != null || node.right.right != null))) nodeCount++; nodes.add(node.left);nodes.add(node.right); } } if (nodeCount > 0) getStr(depth + 1, nodes); } @Override public String toString() { 
    return String.valueOf(val); } / * 层序遍历一棵树的元素并转化为字符串 * @param node * @return */ public static String treeToString(TreeNode node) { 
    //每一层遍历并输出 List<TreeNode> nodes = new ArrayList<>(); nodes.add(node); if (node.left != null || node.right != null) { 
    node.getStr(2,nodes);} return nodes.toString(); } / * 将数组转化为一棵树,层序遍历 * @param nums * @return */ public static TreeNode convertArrToTree(Integer[] nums) { 
    TreeNode[] nodes = new TreeNode[nums.length]; //获取层数,根据层数,创建每一层元素,创建好的节点放到数组里,方便 double depth = (Math.log(nums.length + 1) / Math.log(2)); // if (depth > (int)depth) depth = (int)depth + 1; for (int i = nums.length - 1; i >= 0; i--) { 
    if (nums[i] == null) nodes[i] = null; else { 
    nodes[i] = new TreeNode(nums[i]); //获取节点深度 // double vv = Math.log(i + 1) / Math.log(2); // int v = vv > (int)vv ? (int)vv + 1 : (int) vv + 1; //获取左右节点 if (nums.length > (2 * i + 1)) { 
    nodes[i].left = nodes[2 * i + 1]; } if (nums.length > (2 * i + 2)) { 
    nodes[i].right = nodes[2 * i + 2]; } } } return nodes[0]; } } 

这个代码写的有点罗里吧嗦的…刚开始还搞出了几个bug,不过经过一段时间的使用,并没有啥问题,我想应该ok了!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214451.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午4:13
下一篇 2026年3月18日 下午4:14


相关推荐

  • Fisher精确检验与卡方检验

    Fisher精确检验与卡方检验Fisher 精确检验与卡方检验的区别方法原理不同导致 可应用的样本数不同方法原理及 python 实现 link

    2026年3月19日
    2
  • 操作系统面试题目(linux系统基础面试题)

    文章目录操作系统简介篇解释一下什么是操作系统操作系统的主要功能软件访问硬件的几种方式解释一下操作系统的主要目的是什么操作系统的种类有哪些为什么Linux系统下的应用程序不能直接在Windows下运行操作系统结构单体系统分层系统微内核客户-服务器模式为什么称为陷入内核什么是用户态和内核态用户态和内核态是如何切换的?什么是内核什么是实时系统Linux操作系统的启动过程进程和线程篇多处理系统的优势什么是进程和进程表什么是线程,线程和进程的区别什么是上下文切换使用多线程的好处是什么进程终止的方式进程的终止

    2022年4月12日
    65
  • dubbo负载均衡策略

    dubbo负载均衡策略121212dubbo负载均衡策略RandomLoadBalance–随机负载均衡默认情况下,dubbo是RandomLoadBalance,随机调用实现负载均衡,可以对不同provider设置不同

    2022年7月4日
    20
  • HashMap currentHashMap总结

    HashMap currentHashMap总结HashMap不同点:(1)JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1.7是用单链表进行的纵向延伸,当采用头插法时会容易出现逆序且环形链表死循环问题。但是在JDK1.8之后是因为加入了红黑树使用尾插法,能够避免出现逆序且链表死循环的问题。(2)扩容后数据存储位置的计算方式也不一样:1.在JDK1.7的时候是直接用hash值和需要扩…

    2022年6月18日
    25
  • HTML5 LocalStorage本地存储和sessionStorage使用

    HTML5 LocalStorage本地存储和sessionStorage使用强烈推荐分享一个大神的人工智能教程 零基础 通俗易懂 风趣幽默 还带黄段子 希望你也加入到人工智能的队伍中来 点击一下 也是对作者的支持 http captainbed coolspan com 用过 HTML5LocalSt 本地存储和 sessionStora 的 你就感觉 html5 很强大 比 cookie 和 session 好用很多 下面让我们来学习这个知识吧

    2026年3月19日
    2
  • linux空文件夹删不掉_linux可以遍历删除空目录吗

    linux空文件夹删不掉_linux可以遍历删除空目录吗请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习。1.rmdir命令简介本文主要介绍rmdir命令,该命令用于删除Linux上的空目录。对于非空目录,请使用rm命令。2.rmdir命令选项-p或–parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;–ignore-fail-on-non-empty:此…

    2025年5月27日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号