用js 按照数组层次构建一棵二叉树树

function TreeNode(val) {
    this.val = val;
    this.left = this.right = null;
}

var createTree = function(root,data){
    root = new TreeNode(data);
    return root;
}
var arr = [10,5,15,3,7,13,18];

var root = new TreeNode(arr[0]);

var result=[],i=1;
result.push(root);
while(result.length!= 0){
      r= result.shift();
    if(i < arr.length-1){
       // console.log(root)
        result.push(createTree(r.left,arr[i]));
        result.push(createTree(r.right,arr[i+1]));
    }
    //console.log(result);
    i+=2;
}

console.log(root);


想问下这段代码错在哪

阅读 3.3k
2 个回答

请问你这样写跟直接通过下标返回完全二叉树有啥区别,而且你这样写都没有把节点全部连起来

新手上路,请多包涵
if(i < arr.length-1){
       // console.log(root)
        result.push(createTree(r.left,arr[i]));
        result.push(createTree(r.right,arr[i+1]));
    }

错在这里,边界问题,

  • 一个是对r的null时候需要continue。
  • 另一个是left和right的结束边界并不一致

    • left 是 arr.length
    • right 是 arr.length - 1
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题