这是我参与8月更文挑战的第六天,活动详情查看:8月更文挑战”markdown
上一章介绍的树的基本概念,并简单说了一下深度优先遍历和广度优先遍历。app
这一章就来介绍一下树的另外一种结构 二叉树
, 并唠唠它的先中后序遍历。post
树中每一个节点最多只能有两个子节点。ui
下图就是一个现实中存在的二叉树,每一个节点下都有两个字节点。说实话挺佩服拍照的人的,居然真在现实生活中找到真实的二叉树。url
JS
中一般用 Object
来模拟二叉树。以下代码:const binaryTree = {
val: 1,
left: {
val: 2,
left: null,
right: null
}
right: {
val: 3,
left: null,
right: null
}
}
复制代码
就是一个简单的一个经过 JS Object
模拟的二叉树。spa
访问根节点。3d
对根节点的左子树进行先序遍历。code
对根节点的右子树进行先序遍历。orm
代码以下:cdn
const binaryTree = {
val: 1,
left: {
val: 2,
left: {
val: 3,
left: null,
right: null
},
right: {
val: 4,
left: {
val: 5,
left: null,
right: null
},
right: null
}
},
right: {
val: 6,
left: null,
right: {
val: 7,
left: null,
right: null
}
}
}
复制代码
进行先序遍历:
const preorder = (root) => {
if (!root) return
console.log(root.val)
preorder(root.left)
preorder(root.right)
}
preorder(binaryTree)
// 1 2 3 4 5 6 7
复制代码
对根节点的左子树进行中序遍历。
访问根节点。
对根节点的右子树进行中序遍历。
代码以下:
const binaryTree = {
val: 5,
left: {
val: 2,
left: {
val: 1,
left: null,
right: null
},
right: {
val: 4,
left: {
val: 3,
left: null,
right: null
},
right: null
}
},
right: {
val: 6,
left: null,
right: {
val: 7,
left: null,
right: null
}
}
}
复制代码
进行中序遍历:
const inorder = (root) => {
if (!root) return
inorder(root.left)
console.log(root.val)
inorder(root.right)
}
inorder(binaryTree)
// 1 2 3 4 5 6 7
复制代码
对根节点的左子树进行中序遍历。
对根节点的右子树进行中序遍历。
访问根节点。
代码结构以下:
const binaryTree = {
val: 7,
left: {
val: 4,
left: {
val: 1,
left: null,
right: null
},
right: {
val: 3,
left: {
val: 2,
left: null,
right: null
},
right: null
}
},
right: {
val: 6,
left: null,
right: {
val: 5,
left: null,
right: null
}
}
}
复制代码
进行后序遍历:
const postorder = (root) => {
if (!root) return
postorder(root.left)
postorder(root.right)
console.log(root.val)
}
postorder(binaryTree)
// 1 2 3 4 5 6 7
复制代码
End~~~