js实现将一个二维数组转换成树结构

本文介绍了一种使用JavaScript将二维数组转换为树形结构的方法。通过遍历数组,创建对象并构建父子关系,最终形成树状数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用js实现将一个二维数组转换成树结构。

例如:将下面的二维数组:

var arr = [
    ["a", "aa", "aaa", "aaaa"],
    ["b", "bb", "bbb"],
    ["a", "ab", "aba"],
    ["a", "aa", "aab"]
]

转成下面树结构的对象数组:

[{
    "name" : "a",
    "child" : [
        {
            "name" : "aa",
            "child" : [
                {
                    "name" : "aaa",
                    "child" : [
                        {
                            "name" : "aaaa",
                            "child" : []
                        }
                    ]
                },
                {
                    "name" : "aab",
                    "child" : []
                }
            ]
        },
        {
            "name" : "ab",
            "child" : [
                {
                    "name": "aba",
                    "child" : []
                }
            ]
        }
    ]
},
{
    "name": "b",
    "child" : [
        {
            "name" : "bb",
            "child" : [
                {
                    "name" : "bbb",
                    "child" : []
                }
            ]
        }
    ]
}]

代码如下:

function toTree(arr) {
	const obj = {};
	const res = [];
	for (let i = 0; i < arr.length; i++) {
	    for (let j = 0; j < arr[i].length; j++) {
	        const item = arr[i][j];
	        if (!obj[item]) {
	            obj[item] = {
	                name: item,
	                child: [],
	            };
	        }
	        if (j > 0) {
	            const parent = obj[arr[i][j - 1]];
	            if (parent) {
	                if (parent.child.indexOf(obj[item]) < 0) {
	                    parent.child.push(obj[item]);
	                }
	            }
	        } else {
	            if (res.indexOf(obj[item]) < 0) {
	                res.push(obj[item]);
	            }
	        }
	    }
	}
	return res;
}

console.log(toTree(arr))

最终转换结果为:
js实现将一个二维数组转换成树结构

### 将数组转换为二叉树结构 在 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]。对于非排序或者不满足特定条件的数据集,则可能需要先对其进行预处理再执行此过程。 注意,在实际应用中,如果要确保生成的是二叉搜素树而不是普通的二叉树,那么传入的数组应该已经是有序状态下的数据集合;如果不是的话则需提前做升序或降序排列处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值