使用js进行二叉树结构数据与数组结构数据的互相转化

本文介绍如何使用JavaScript将具有特定结构的二叉树数据转换为数组,以及将数组转换回二叉树。树形结构特点是:父节点type为logic,叶节点type为leaf或model,叶子节点的右子树为空。通过递归方法可以实现两种结构的相互转化。示例展示了转化过程,并提供了在线JSON格式化工具链接。
摘要由CSDN通过智能技术生成

简单的说下本示例中的树形数据的结构:

"type": "logic",
"content": "and",
"left": {
    "type": "leaf",
    "content": "=",
    "left": "ID",
    "right": "123"
},
"right": {
    "type": "leaf",
    "content": "~",
    "left": "Time",
    "right": "234~"
}

即每个节点都包含type, content, left,right四个属性,其中type, content包含该结点的数据,left和right包含该借点的左右子树节点。而我们关心的数据始终都包含在叶子节点中。

父节点的type始终为logic,叶节点的type为leaf或者model,其中model始终有一个右子树节点,他的下面不会有其它节点。

这里我们的树结构都是左节点是子树或者叶节点,右节点始终为叶节点,用图来表示就是这样:
这里写图片描述

如果有4个节点的话,那么上图1 的位置就会变成一个二叉树结构了。

上述就是这个树形结构的说明了。

将它解析为数组格式的话就要运用递归的方法了:

//声明一个变量用来存储结果
var res = [];
function treeToArr(t) {
    if (t.type == "logic") {
        //是父节点
        if (t.right.type == "model") {
            res.push({
                relation: 'and',
                field: t.right.left,
                value: t.right.right.content,
                operation: t.right.content,
            })
        } else {
            res.push({
                relation: 'and',
                field: t.right.le
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值