MisterMister 2021-04-26 11: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 11: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 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题