MisterMister 2021-04-26 03:14 采纳率: 40%
浏览 42
已采纳

根据长度为n的数组生成n层深度的数据结构

有一个不定长的数组,数组中有n个字符串,要求实现:第1个元素是第0个元素的子元素,第2个元素是第一个元素的子元素,第3个元素是第二个元素的子元素,依次类推,最后输出父子结构的元素。

如:[1,2,3,4]

输出 {
        1 : children{
            2 : children{
                3 : children{
                    4
                }
            }
        }
    }

  • 写回答

4条回答 默认 最新

  • CSDN专家-黄老师 2021-04-26 03:20
    关注

    这个数据结构是树状结构,可以参考

    import java.util.LinkedList;
    import java.util.List;
    class TreeNode{
    	int val;
    	TreeNode left;
    	TreeNode right;
    	TreeNode(int x){
    		val = x;
    	}
    }
    
    public class test1 {
    	public static int[] array = {1, 2, 3, 4, 5, 6, 7};
    	public static List<TreeNode> nodeList = new LinkedList<TreeNode>();
    	public static void createBinTree() {
    		//并把数组中的值都转化为树结点的值,存储到list中
    		for(int i = 0; i < array.length; i++) {
    			nodeList.add(new TreeNode(array[i]));
    		}
    		for(int j = 0; j < array.length/2 - 1; j++) {
    			//左孩子
    			nodeList.get(j).left = nodeList.get(j*2 + 1);
    			//右孩子
    			nodeList.get(j).right = nodeList.get(j*2 + 2);
    		}
    		
    		//最后一个父结点,可能没有右孩子
    		int lastParent = array.length / 2 - 1;
    		//所以,先处理左孩子
    		nodeList.get(lastParent).left = nodeList.get(lastParent*2 + 1);
    		//如果数组长度为奇数,那么就建立右孩子
    		if(array.length % 2 == 1) {
    			nodeList.get(lastParent).right = nodeList.get(lastParent*2 + 2);
    		}
    		
    	}
    	public static void inorder(TreeNode root) {
    		if(root == null)
    			return;
    		System.out.print(root.val + " ");
    		inorder(root.left);
    		inorder(root.right);
    	}
    	
    	public static void main(String[] args) {
    		createBinTree();
    		//第一个结点就是根结点
    		TreeNode root = nodeList.get(0);
    		inorder(root);
    	}
    }
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)
  • ¥15 传人记程序做的plc 485从机程序该如何写
  • ¥15 已知手指抓握过程中掌指关节、手指各关节和指尖每一帧的坐标,用贝塞尔曲线可以拟合手指抓握的运动轨迹吗?
  • ¥50 libwebsockets 如何添加其他socket事件回调
  • ¥50 实现画布拖拽算子排布,通过flink实现算子编排计算,请提供思路
  • ¥15 esium自定义材质拉伸问题
  • ¥15 cmake+mingw使用<mysqlx/xdevapi.h>报错
  • ¥15 eNSP中防火墙的使用
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部