将扁平化的json转成树结构

来源自https://stackoverflow.com/questions/17847131/generate-multilevel-flare-json-data-format-from-flat-json

原始扁平json结构,带有parent字段

[
 { "name" : "ABC", "parent":"DEF", "relation": "ghi", "depth": 1 },
 { "name" : "DEF", "parent":"null", "relation": "null", "depth": 0 },
 { "name" : "new_name", "parent":"ABC", "relation": "rel", "depth": 2 }
 ....
 ....
 ]

需要转成嵌套的树形结构:

[ 
 {
   "name": "DEF",
   "parent": "null",
   "relation": "null",
   "children": [
                 { "name": "ABC",
                   "parent": "DEF",
                   "relation": "ghi",
                   "children": [
                                 "name": "new_name",
                                 ...
                                 "children": []
                               ]
                 }
               ]
  }
 ]

jsfiddle地址http://jsfiddle.net/9FqKS/

// create a {name: node} map
var dataMap = data.reduce(function(map, node) {
    map[node.name] = node;
    return map;
}, {});

相当于

var dataMap = {};
data.forEach(function(node) {
    dataMap[node.name] = node;
});

然后迭代地将每个子项添加到其父项,如果没有找到父项则将其添加到根数组:

// create the tree array
var tree = [];
data.forEach(function(node) {
    // find parent
    var parent = dataMap[node.parent];
    if (parent) {
        // create child array if it doesn't exist
        (parent.children || (parent.children = []))
            // add node to parent's child array
            .push(node);
    } else {
        // parent is null or missing
        tree.push(node);
    }
});
### 将数组转换为二叉树结构 在 Java 中实现将数组转换为二叉树结构的过程涉及创建节点类以及构建树的方法。下面提供了一种基于完全二叉树特性的方法来完成这一操作。 #### 创建 TreeNode 类 为了表示二叉树中的每一个节点,定义 `TreeNode` 类如下: ```java class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode(int x) { val = x; } } ``` #### 数组转二叉树函数 接下来编写一个辅助函数用于从给定整数类型的输入数组建立对应的二叉查找树(BST),这里假设该数组已经按照层次遍历顺序排列好,并且可以形成一棵完整的二叉树。 ```java public class ArrayToBST { private static TreeNode sortedArrayToBST(int[] nums) { if (nums == null || nums.length == 0) return null; return createMinimalBST(nums, 0, nums.length - 1); } private static TreeNode createMinimalBST(int[] arr, int start, int end){ if(end < start) return null; int mid = (start + end)/2; TreeNode n = new TreeNode(arr[mid]); n.left = createMinimalBST(arr,start,mid-1); n.right = createMinimalBST(arr,mid+1,end); return n; } // 测试代码片段 public static void main(String args[]) { int [] num={1,2,3,4,5,6,7}; TreeNode root=sortedArrayToBST(num); System.out.println("Root value:"+root.val); } } ``` 上述代码实现了通过递归方式构造平衡的二叉搜索树[^1]。对于非排序或者不满足特定条件的数据集,则可能需要先对其进行预处理再执行此过程。 注意,在实际应用中,如果要确保生成的是二叉搜素树而不是普通的二叉树,那么传入的数组应该已经是有序状态下的数据集合;如果不是的话则需提前做升序或降序排列处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值