博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.求二叉树的最近公共祖先的两个非DFS方法
阅读量:3957 次
发布时间:2019-05-24

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

1.先序&&中序

(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)中序&&先序

function pre(root){    if(root){      preArr.push(root.val)      pre(root.left)      pre(root.right)    }  }  function In(root){    if(root){      In(root.left)      inArr.push(root.val)      In(root.right)    }  }  const preArr = []  const inArr = []  pre(root)  In(root)  let l = inArr.indexOf(p)  let r = inArr.indexOf(q)  const set = new Set(inArr.slice(l, r+1))  for(let el of preArr){    if(set.has(el)) return el  }

 

 

2.map记录每个节点的祖先节点

function pre(root){  if(root){    if(root.left){      map.set(root.left.val, [root.left.val, ...map.get(root.val)])    }    if(root.right){      map.set(root.right.val, [root.right.val, ...map.get(root.val)])    }    pre(root.left)    pre(root.right)  }}const map = new Map()map.set(root.val, [root.val])mappre(root)mapconst set1 = new Set(map.get(5)) const set2 = new Set(map.get(1))set1set2for(el of set1){  if(set2.has(el)){    console.log(el);    break;  }}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

你可能感兴趣的文章
Docker私库
查看>>
hdu——1106排序(重定向)
查看>>
hdu——1556Color the ball(树状数组)
查看>>
hdu——1541Stars(树状数组)
查看>>
快速幂的精简代码
查看>>
求大数乘方的前n位数字(对数加快速幂)
查看>>
hdu——2602Bone Collector(第一类背包问题)
查看>>
hdu——1711Number Sequence(kmp专练)
查看>>
strstr函数和find函数的异同
查看>>
Java的反射
查看>>
HTTP请求之POST与GET区别
查看>>
SSM结合Redis
查看>>
优化数据库的八种方法
查看>>
Java Web服务收到请求时线程的情况以及session情况
查看>>
SSM配置文件信息加密实现
查看>>
@Produces注解
查看>>
谈谈序列化—实体bean一定要实现Serializable接口?
查看>>
实用小技巧之电脑如何滚动截屏/截取长图
查看>>
Eclipse离线安装Java Decompiler插件
查看>>
Http预请求options
查看>>