在JavaScript中遍历二进制搜索树时构建对象

在JavaScript中遍历二进制搜索树时构建对象,javascript,binary-search-tree,javascript-objects,tree-traversal,Javascript,Binary Search Tree,Javascript Objects,Tree Traversal,其思想是遍历二叉搜索树(BST)并用相同的方法构建一个对象。对象表示BST 例如: 20 / \ 5 60 \ / \ 10 40 90 \ 50 \ 55 我可以在向BST插入元素时生成这个对象,但是,因为我想在其中应用一些平衡算法,所以不需要插入任何其他节点。我只需要得到最终的物体和平衡的结果 出现的导线测量方法是宽度优先法。然而,我没有弄

其思想是遍历二叉搜索树(BST)并用相同的方法构建一个对象。对象表示BST

例如:

      20
   /      \
  5       60
   \     /  \
    10  40  90
         \
         50
           \
           55
我可以在向BST插入元素时生成这个对象,但是,因为我想在其中应用一些平衡算法,所以不需要插入任何其他节点。我只需要得到最终的物体和平衡的结果

出现的导线测量方法是宽度优先法。然而,我没有弄清楚如何用非递归方法构建对象,因为广度优先旅行是一种迭代方法

对于上述示例,结果对象应如下所示:

{
    val:20,
    l:{
        val:5,
        l:{},
        r:{
            val:10,
            l:{},
            r:{}
        }
    },
    r:{
        val:60,
        l:{
            val:40,
            l:{},
            r:{
                val:50,
                l:{},
                r:{
                    val:55,
                    l:{},
                    r:{}
                }
            }
        },
        r:{
            val:90,
            l:{},
            r:{}
        }
    }
}
到目前为止,我得到的是:

Breadth_first = function (callback) {
    var q = [];
    q.push(root);
    while(q.length > 0){
        var node = q.shift();
        callback(node.level, node.value);
        if(node.leftChild.value !== null){
            q.push(node.leftChild);
        }
        if(node.rightChild.value !== null){
            q.push(node.rightChild);
        }
    }
}
我当前用于以这种格式构建对象的方法如下:

insertNode = function (node, value, jsObj) {
    if (node.value === null) {
        node.leftChild = new Node();
        node.rightChild = new Node();

        node.value = value;

        jsObj.val = value;
        return true;
    }
    var nodeVal = parseInt(node.value, 10);
    if (value < nodeVal) {
        if(!jsObj.l.val)
            jsObj.l = {val:null, l:{}, r:{}};
        insertNode(node.leftChild, value, jsObj.l);
    } else if (value > nodeVal) {
        if(!jsObj.r.val)
            jsObj.r = {val:null, l:{}, r:{}};
        insertNode(node.rightChild, value, jsObj.r);
    }
}
insertNode=函数(节点,值,jsObj){
if(node.value==null){
node.leftChild=新节点();
node.rightChild=新节点();
node.value=值;
jsObj.val=值;
返回true;
}
var nodeVal=parseInt(node.value,10);
如果(值<节点值){
如果(!jsObj.l.val)
l={val:null,l:{},r:{};
insertNode(node.leftChild,value,jsObj.l);
}否则如果(值>节点评估){
如果(!jsObj.r.val)
r={val:null,l:{},r:{};
insertNode(node.rightChild,value,jsObj.r);
}
}
任何猜测或线索将不胜感激