https://juejin.im/entry/59c3be3e6fb9a00a571d39e4
// 二叉树
function BinaryTree(key){
let Node = function(key){
this.key = key;
this.left = null;
this.right = null;
}
let root = null;
let insertNode = function(node, newNode){
if ( newNode.key < node.key ){
if ( node.left === null ){
node.left = newNode;
} else {
insertNode(node.left, newNode);
}
} else {
if (node.right === null){
node.right = newNode;
} else {
insertNode(node.right, newNode);
}
}
}
this.insert = function(key){
let newNode = new Node(key);
if (root === null){
root = newNode;
} else {
insertNode(root, newNode);
}
}
// 中序遍历
let inOrderTraverseNode = function(node, callback){
if ( node !== null ){
inOrderTraverseNode(node.left, callback);
callback(node.key);
inOrderTraverseNode(node.right, callback);
}
}
this.inOrderTraverse = function(callback){
inOrderTraverseNode(root, callback);
}
// 前序遍历
let preOrderTraverseNode = function(node, callback) {
if ( node != null ){
callback(node.key);
preOrderTraverseNode(node.left, callback);
preOrderTraverseNode(node.right, callback);
}
}
this.preOrderTraverse = function(callback){
preOrderTraverseNode(root, callback);
}
// 后序遍历
let postOrderTraverseNode = function(node, callback){
if ( node != null ){
postOrderTraverseNode(node.left, callback);
postOrderTraverseNode(node.right, callback);
callback(node.key);
}
}
this.postOrderTraverse = function(callback){
postOrderTraverseNode(root, callback);
}
}
let nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
let binaryTree = new BinaryTree();
nodes.forEach(function(key){
binaryTree.insert(key);
})
// 二叉树的遍历方法:1. 中序遍历 2. 前序遍历 3. 后序遍历
// 中序遍历
// let callback = function(key){
// console.log(key);
// }
// binaryTree.inOrderTraverse(callback);
// 前序遍历
// let callback = function(key){
// console.log(key)
// }
// binaryTree.preOrderTraverse(callback);
// 后序遍历
let callback = function(key){
console.log(key);
}
binaryTree.postOrderTraverse(callback);
网友评论