二叉树是计算机科学中常见的数据结构,具有广泛的应用。在实际开发中,对二叉树进行各种操作是很常见的需求。本文将介绍二叉树的几种常见操作,并提供相应的 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 实现代码示例。通过学习和理解这些操作,可以更好地应用二叉树结构解决实际问题,提高编程技能水平。