二叉树总共有三种遍历方式,分别是先序遍历,中序遍历,后序遍历。
创建二叉树
function BinarySearchTree () {
function Node (key) {
this.key = key
this.left = null
this.right = null
}
//属性 根节点
this.root = null
//方法
BinarySearchTree.prototype.insert = function (key) {
var newNode = new Node(key)
//先判断根节点是否为空,如果根节点为空创建根节点
if (this.root == null) {
this.root = newNode
} else {
//根节点不为空 需要使用递归插入
this.insertNode(this.root, newNode)
}
}
BinarySearchTree.prototype.insertNode = function (node, newNode) {
//向左查找
if (newNode.key < node.key) {
//需要判断下一个节点是否为空
if (node.left == null) {
node.left = newNode
} else {
//如果不为空继续进行递归
this.insertNode(node.left, newNode)
}
} else {
//向右查找
if (node.right == null) {
node.right = newNode
} else {
this.insertNode(node.right, newNode)
}
}
}
```js
1. 先序遍历
先从 根节点->左子树->右子树
//二叉搜索树
function BinarySearchTree () {
//二叉搜索树遍历
//先序遍历
BinarySearchTree.prototype.proOrder = function (handler) {
this.proOrderNode(this.root, handler)
}
//先序遍历递归
BinarySearchTree.prototype.proOrderNode = function (node, handler) {
if (node != null) {
//中间的值
this.proOrderNode(node.left, handler)
handler(node.key)
this.proOrderNode(node.right, handler)
}
}
}
var db = new BinarySearchTree()
db.insert(11)
db.insert(7)
db.insert(5)
db.insert(3)
db.insert(6)
db.insert(9)
db.insert(8)
db.insert(10)
db.insert(15)
db.insert(13)
db.insert(12)
db.insert(14)
db.insert(20)
db.insert(18)
db.insert(25)
var str = ""
db.proOrder(function (key) {
str += key + " "
})
console.log(str);
2.中序遍历
左节点->根节点->右节点 只需要改动一下递归里面的顺序就可以实现中序遍历
//先序遍历递归
BinarySearchTree.prototype.proOrderNode = function (node, handler) {
if (node != null) {
//中间的值
this.proOrderNode(node.left, handler)
handler(node.key)
this.proOrderNode(node.right, handler)
}
}
3.后序遍历
左节点->右节点->根节点 同理改变递归里面的顺序
//先序遍历递归
BinarySearchTree.prototype.proOrderNode = function (node, handler) {
if (node != null) {
//中间的值
this.proOrderNode(node.left, handler)
this.proOrderNode(node.right, handler)
handler(node.key)
}
}
总结: