二叉树

1>二叉树

        var root = null;
        //添加数据形成二叉树,只考虑所有数据都不相等
        function bt_add(node,n){
            if(root == null){
                        //alert('根节点为空,把 '+n+' 作为根节点');
                        root = {
                                value:n,
                                l:null,
                             r:null
                        };
                }else if(node.value == n){
                        return;
                }else{
                        if(n < node.value){
                                //alert(n + ' 小于 ' + node.value + ',准备向左走!');
                                if(node.l){
                                    //alert('左边没地方了,准备加到 '+node.l.value +'上');
                                    //左边有值
                                    return bt_add(node.l,n);
                            }else{
                                    //alert('左边有地方,加入!');
                                    node.l = {
                                            value:n,
                                            l:null,
                                            r:null
                                    };
                                }
                        }else{
                                //alert(n + ' 大于 ' + node.value + ',准备向右走!');
                                if(node.r){
                                    //alert('右边没地方了,准备加到 '+node.r.value +'上');
                                    return bt_add(node.r,n);
                                }else{
                                    //alert('右边有地方,加入!');
                                    node.r = {
                                            value:n,
                                            l:null,
                                            r:null
                                        };
                                    }
                            }
                    }
        }
        //在二叉树中进行查找
        function bt_find(node,n){
                if(root == null){
                    return false;
                }else if(node.value == n){
                    return true;
                }else{
                        if(n > node.value){
                                //向右去找
                                if(node.r == null){return false;}
                                return bt_find(node.r,n);
                        }else{
                            //向左找
                            if(node.l == null) return false;
                            return bt_find(node.l,n);
                        }
                }
        }

        //测试
        var N = 10000;
        var oTime = new Date().getTime();
        for(var i = 0; i< N; i++){
            bt_add(root,Math.floor(Math.random()*i));
        }
        for(var i = 0; i<N;i++){
            bt_find(root,Math.floor(Math.random()*i));
        }
        alert(new Date().getTime()-oTime);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,501评论 1 31
  • 四、树与二叉树 1. 二叉树的顺序存储结构 二叉树的顺序存储就是用数组存储二叉树。二叉树的每个结点在顺序存储中都有...
    MinoyJet阅读 1,597评论 0 7
  • 编程中我们会遇到多少挫折?表放弃,沙漠尽头必是绿洲。 学习二叉树的意义 由于二叉树的知识更倾向于理论,所以我们在实...
    神经骚栋阅读 6,315评论 5 57
  • 去年二叉树算法的事情闹的沸沸扬扬,起因是Homebrew 的作者 @Max Howell 在 twitter 上发...
    Masazumi柒阅读 1,629评论 0 8
  • 今天预报说是有雨,但是中午过后一直未见雨的踪影,感觉天气很闷,从以往的经验判断,一场大雨即将到来。下午两点多,就看...
    地中海的传说阅读 268评论 1 2