首页 > 编程语言 > 详细

js二叉树,前序/中序/后序(最大最小值,排序)

时间:2017-10-19 19:18:16      阅读:207      评论:0      收藏:0      [点我收藏+]
    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二叉树,前序/中序/后序(最大最小值,排序)

原文:http://www.cnblogs.com/jiebba/p/7694104.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!