博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.构建二叉树
阅读量:3956 次
发布时间:2019-05-24

本文共 1765 字,大约阅读时间需要 5 分钟。

1.根据层次遍历构建二叉树

function TreeNode(val){  this.val = val;  this.left = null;  this.right = null;}function  createTreeByLevelOrder(levelOrder){  let queue = []   // queue 里面存储的是新建的树的层序遍历的节点关系  // queue中是两层节点之间的父子关系  if(levelOrder[0]){    let node = levelOrder.shift()    var root = new TreeNode(node)    queue.push(root)    while(queue.length && levelOrder.length){      // 只有在levelOrder的元素不为null的时候,才会新建节点,然后向queue中push,所以用queue.length作为循环判断      // 使用levelOrder.length来判断是否有剩余节点,不管最后一个节点之后是否填充null,都可以;如果最后节点之后没有填充null的话,防止死循环      let par = queue.shift()      let pleft = levelOrder.shift()      if(pleft !== null){        par.left = new TreeNode(pleft)        queue.push(par.left)      }            let pright = levelOrder.shift()      if(pright !== null){        par.right = new TreeNode(pright)        queue.push(par.right)      }    }  }  return root}

 

2.根据先序遍历构建二叉树

// definition for a binary tree node function TreeNode(val){  this.val = val;  this.left = null;  this.right = null;}let preOrderArr=['a','b','d','#','f','#','#','#','c','#','e','#','#']function createTreeByPre(arr){  let root = null  if(arr[0]){    let nodeVal = arr.shift()    if(nodeVal !== '#'){      root = new TreeNode(nodeVal)      root.left = createTreeByPre(arr)      root.right = createTreeByPre(arr)    }  }  return root  // 这里必须要return一个root,因为root是一直更新的。从栈中pop的最后一个root就是根节点。如果不return的话,最后一个root就是最后一个节点}let tree = createTreeByPre(preOrderArr)

 

3.根据先序和中序遍历构建二叉树

var buildTree = function(preorder, inorder) {  if(preorder.length === 0) return null  const root = new TreeNode(preorder[0])  const mid = inorder.indexOf(preorder[0])  root.left = buildTree(preorder.slice(1, mid+1), inorder.slice(0, mid))  root.right = buildTree(preorder.slice(mid+1), inorder.slice(mid+1))  return root};

 

 

 

 

 

 

 

 

 

转载地址:http://tzxzi.baihongyu.com/

你可能感兴趣的文章
POJ 2240---Arbitrage(Floyd的dp思想)
查看>>
Dijkstra算法---模板
查看>>
POJ 3680(费用流)
查看>>
校oj10532: 生成字符串(dp,最优状态转移)
查看>>
平衡二叉树(AVL树)
查看>>
POJ1521---哈夫曼编码,求最优WPL
查看>>
POJ---2010(Moo University - Financial Aid,优先队列)
查看>>
POJ---3662(Telephone Lines,最短路+二分*好题)
查看>>
L2-007. 家庭房产(并查集)
查看>>
L2-016. 愿天下有情人都是失散多年的兄妹(搜索)
查看>>
L2-019. 悄悄关注
查看>>
POJ 3468 A Simple Problemwith Integers(SplayTree入门题)
查看>>
营业额统计 HYSBZ - 1588 (伸展树简单应用)
查看>>
HDU 1890 Robotic Sort(伸展树---反转应用)
查看>>
POJ 3580 SuperMemo(伸展树的几个基本操作)
查看>>
(十) Web与企业应用中的连接管理
查看>>
(八) 正则表达式
查看>>
一.JavaScript 基础
查看>>
7.ECMAScript 继承
查看>>
HTML DOM
查看>>