先序和中序生成二叉树(js)

先序和中序生成二叉树js代码:

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

/**
 * @param {number[]} preorder
 * @param {number[]} inorder
 * @return {TreeNode}
 */
var buildTree = function(preorder, inorder) {  
    var root
    if(preorder.length===0){//preorder和inorder为null的情况
         root=null
    }else{
        root=new TreeNode(preorder[0])
        let indRoot=inorder.indexOf(preorder[0])    
        let inleft=inorder.slice(0,indRoot),inright=inorder.slice(indRoot+1)
        let preleft=preorder.slice(1,1+inleft.length),preright=preorder.slice(1+inleft.length)
        travel(root,inleft,inright,preleft,preright)
    }

    return root
};

function travel(tree,inleftTree,inrightTree,preleft,preright){
    if(inleftTree.length===0){
      tree.left=null
    }else{
        tree.left=new TreeNode(preleft[0])     
        let indRoot=inleftTree.indexOf(preleft[0])
        let inleft=inleftTree.slice(0,indRoot),inright=inleftTree.slice(indRoot+1)
        let pleft=preleft.slice(1,1+inleft.length),pright=preleft.slice(1+inleft.length,preleft.length)
        travel(tree.left,inleft,inright,pleft,pright)
    }
    
     if(inrightTree.length===0){
       tree.right=null
    }else{        
        tree.right=new TreeNode(preright[0])
        let indRoot=inrightTree.indexOf(preright[0])       
        let inleft=inrightTree.slice(0,indRoot),inright=inrightTree.slice(indRoot+1,inrightTree.length)
        let pleft=preright.slice(1,1+inleft.length),pright=preright.slice(1+inleft.length,preright.length)        
        travel(tree.right,inleft,inright,pleft,pright)
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值