剑指offer面试题23:从上到下打印二叉树
题目描述:从上到下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。
function Queue() {
var items = [];
this.enqueue = function(element) {
items.push(element);
}
this.dequeue = function() {
return items.shift();
}
this.isEmpty = function() {
return items.length === 0;
}
this.front = function() {
return items[0];
}
}
function BinarySearchTree() {
var Node = function(key) {
this.key = key;
this.left = null;
this.right = null;
}
var root = null;
this.insert = function(key) {
var newNode = new Node(key);
if(root === null) {
root = newNode;
}else{
insertNode(root, newNode);
}
}
var 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.root = function() {
return root;
}
}
function PrintFromTopBottom(tree) {
var queue = new Queue();
if(!tree) {
return false;
}
queue.enqueue(tree.root());
while(!queue.isEmpty()) {
var node = queue.front();
queue.dequeue();
console.log(node.key);
if(node.left !== null) {
queue.enqueue(node.left);
}
if(node.right !== null) {
queue.enqueue(node.right);
}
}
}
var tree = new BinarySearchTree();
tree.insert(8);
tree.insert(6);
tree.insert(10);
tree.insert(5);
tree.insert(7);
tree.insert(9);
tree.insert(11);
PrintFromTopBottom(tree);