function Node(data,left,right) {
this.left=left
this.right=right
this.data=data
}
function Btr() {
this.root = null;
}
// D:根节点 L:左子节点 R:右子节点
Btr.prototype.insert=function (data) { //生成排序的 二叉树
if(this.root==null){
this.root = new Node(data,null,null)
}else {
var current = this.root;
while(true){
if(data<current.data){
if(current.left != null){
current = current.left
}else {
current.left = new Node(data,null,null)
break
}
}else {
if(current.right != null){
current = current.right
}else {
current.right = new Node(data,null,null)
break
}
}
}
}
}
Btr.prototype.CenterScan=function () { //中序 ( LDR)
var list=[],root = this.root,left,right
while (root){
if(root.left){
left = root.left
list.unshift(root)
root.left=null
root = left
}else {
console.log(root.data)
if(root.right){
right = root.right
root.right=null
root = right
}else {
root = list.shift()
}
}
}
}
Btr.prototype.FrontScan=function () { //前序 (DLR)
var list=[],root = this.root,left,right
while (root){
if(root.data) console.log(root.data)
left = root.left
right = root.right
if(left){
root.left=null
root.data=null
list.unshift(root)
root = left
}else if(right){
root = right
}else {
root = list.shift()
}
}
}
Btr.prototype.BackScan=function () { //后序 (LRD)
var list=[],root = this.root,left,right
while (root){
left = root.left
right = root.right
if(left){
root.left=null
list.unshift(root)
root = left
}else {
if(right){
root.right = null
list.unshift(root)
root = right
}else {
console.log(root.data)
root = list.shift()
}
}
}
}
Btr.prototype.Max=function () {
var root = this.root,right
while (root){
right = root.right
if(right){
root = right
}else {
console.log(root.data)
root = null
}
}
}
Btr.prototype.Min=function () {
var root = this.root,left
while (root){
left = root.left
if(left){
root = left
}else {
console.log(root.data)
root = null
}
}
}
var btr = new Btr();
btr.insert(6)
btr.insert(2)
btr.insert(1)
btr.insert(4)
btr.insert(3)
btr.insert(5)
btr.insert(9)
btr.insert(8)
btr.insert(10)
btr.CenterScan()