這是我參與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~~~