1. 程式人生 > >js二叉樹,前序/中序/後序(最大最小值,排序)

js二叉樹,前序/中序/後序(最大最小值,排序)

data nod can ole right unshift func pro node

    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()

js二叉樹,前序/中序/後序(最大最小值,排序)