根据前序和中序序列构造二叉树

115 阅读1分钟

LeetCode算法每日一题总结

根据前序和中序遍历序列构造二叉树

要点

  • 读懂前序和中序遍历,他所拥有的性质
  • 如何构造二叉树---js的构造函数 -如何获得根结点的下标--indexOf -如何用递归--递归什么

image.png

代码实现 /**

  • Definition for a binary tree node.
  • function TreeNode(val, left, right) {
  • this.val = (val===undefined ? 0 : val)
    
  • this.left = (left===undefined ? null : left)
    
  • this.right = (right===undefined ? null : right)
    
  • } / /*
  • @param {number[]} preorder
  • @param {number[]} inorder
  • @return {TreeNode}

//1.先写出构造函数--返回一个数组 //2.要写出根结点的下标 //3.根据下标去分数组 //4.要给构造的数组--变成二叉树,就需要给每个root加左右孩子结点 //即在该作用域内把递归接收返回值做为root的左右孩子 //5.如果递归到最后长度是0呢?-左右孩子都为null

  • var buildTree = function (preorder, inorder) { if(preorder.length==0&&inorder.length==0)return null; let i=inorder.indexOf(preorder[0]); let root=new TreeNode(preorder[0]); let lp=preorder.slice(1,i+1); let rp=preorder.slice(i+1,preorder.length); let li=inorder.slice(0,i); let ri=inorder.slice(i+1,inorder.length); root.left= buildTree(lp,li); root.right= buildTree(rp,ri); return root; }; } 笔记 1`const b=['a','b','c','d','e']; const c={ a:66, b:45 } const d =['c','d','a']; console.log(b[d[2]]);//实际就是b['a'],但俩个数组,肯定无法实现解构,这里会是undefined console.log(c[b[0]]);//c为对象,可以在对象里找数组某个元素【即对象的属性名】的属性值 console.log(d.indexOf(b[0]));//这个为两数组的检验下标--注意与解构的区别

`