前端每日一练:js二叉树算法集! 翻转二叉树、 二叉树前序遍历、二叉树中序遍历、二叉树后序遍历、二叉树层序遍历、最大深度二叉树、最小深度二叉树、相同二叉树、对称二叉树、 合并二叉树

二叉树是计算机科学中常见的数据结构,具有广泛的应用。在实际开发中,对二叉树进行各种操作是很常见的需求。本文将介绍二叉树的几种常见操作,并提供相应的 JavaScript 代码示例。

翻转二叉树

翻转二叉树是指将每个节点的左右子树交换位置。以下是翻转二叉树的 JavaScript 实现代码:

var invertTree = function(root) {
   if(!root) return null
    return {
        val:root.val,
        left:inverTree(root.right),
        right:inverTree(root.left)
    }
};

二叉树前、中、后序遍历

前序、中序和后序遍历是三种常见的二叉树遍历方式。以下是它们的 JavaScript 实现代码:

var traversalTree=function(root){
    let result=[]
    fun(root,result)
    
    function fun(root,res){
        if(!root) return;
        result.push(root.val) //前序遍历
        fun(root.left,res)
        fun(root.right,res)
    }
   return result
}

var traversalTree=function(root){
    let result=[]
    fun(root,result)
    
    function fun(root,res){
        if(!root) return;
        fun(root.left,res)
        result.push(root.val) //中序遍历
        fun(root.right,res)
    }
   return result
}


var traversalTree=function(root){
    let result=[]
    fun(root,result)
    
    function fun(root,res){
        if(!root) return;
        
        fun(root.left,res)
        fun(root.right,res)
        result.push(root.val) //后序遍历
    }
   return result
}

二叉树层序遍历

层序遍历是按层次从上到下、从左到右遍历二叉树的方式。以下是层序遍历的 JavaScript 实现代码:

var traversalTree=function(root){
    let stack=[]
    let res=[]
    if(root) stack.push(root)
    while(stack.lenght){
        let levelSize=stack.length
        let level=[]
        for(let i=0;i<leveSize;i++){
            const n=stack.shif()
            level.push(n.val)
            n.left&&stack.push(n.left)
            n.right&&stack.push(n.right)
        }
        res.push(level)
    }
   return res
}

最大深度二叉树

二叉树的最大深度是指从根节点到叶子节点的最长路径的节点数,以下是它们的 JavaScript 实现代码:

var maxDepth = function (root) {
   let deep=0
   let stack=[]
   if(root) stack.push(root)
   while(stack.length){
       deep++
       let size=stack.length
       for(let i=0;i<size;i++){
         let n=stack.shift()
         n.left&&stack.push(n.left)
         n.right&&stack.push(n.right)
    }
  }
  return deep
};

最小深度二叉树

最小深度是指从根节点到最近叶子节点的最短路径的节点数。以下是它们的 JavaScript 实现代码:

 var minDepth = function (root) {
   let deep=0
   let stack=[]
   if(root) stack.push(root)
   while(stack.length){
       deep++
       let size=stack.length
       for(let i=0;i<size;i++){
         let n=stack.shift()
         if (n.left == null && n.right == null) {
        return deep;
      }
         n.left&&stack.push(n.left)
         n.right&&stack.push(n.right)
    }
  }
  return deep
};

相同二叉树

判断两棵二叉树是否相同,即它们的结构和节点值是否完全相同。以下是相同二叉树的 JavaScript 实现代码:

var isSameTree = function(p, q) {
 if(p==null&&q==null) return true
 if(p==null||q==null) return false
 if(p.val!=q.val) return false
 return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right)
};

对称二叉树

判断一个二叉树是否是对称的,即它的左子树和右子树镜像对称。以下是对称二叉树的 JavaScript 实现代码:

var isSymmetric = function(root) {
    if(!root) return true;
    const isMirror = (l, r) => {
        if(!l && !r) return true
        if(l && r && l.val === r.val &&
            isMirror(l.left, r.right) &&
            isMirror(l.right, r.left)
        ) {
            return true
        }
        return false
    }
    return isMirror(root.left, root.right)
};

合并二叉树

合并两棵二叉树,即将两棵树对应节点的值相加,并返回合并后的树。以下是合并二叉树的 JavaScript 实现代码:

var mergeTrees = function (root1, root2) {
  // 如果root1为空,不管root2是否为空,直接返回root2
  if (root1 == null) return root2;
  // 同理对于root2也一样
  if (root2 == null) return root1;
  // 走到这里,肯定root1和root2都不为空了,这里直接相加赋值root1就行
  root1.val = root1.val + root2.val;
  // 递归的对左子树和右子树进行同样操作
  root1.left = mergeTrees(root1.left, root2.left);
  root1.right = mergeTrees(root1.right, root2.right);
  return root1;
};

以上是相同二叉树、对称二叉树和合并二叉树的详细介绍和 JavaScript 实现代码示例。通过学习和理解这些操作,可以更好地应用二叉树结构解决实际问题,提高编程技能水平。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值