`
dyllove98
  • 浏览: 1380265 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:38260
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:78486
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:131645
社区版块
存档分类
最新评论

JavaScript实现二叉搜索树排序

 
阅读更多

<html>
    <head>

        <script type="text/javascript">

            window.onload = function() {

                var div = document.getElementById("cnt");
                var $div = document.getElementById("seq");

                var nodes = [
                
                    new Node({"key" : 7, "value": new Object()}),
                    new Node({"key" : 5, "value": new Object()}),
                    new Node({"key" : 9, "value": new Object()}),
                    new Node({"key" : 4, "value": new Object()}),
                    new Node({"key" : 2, "value": new Object()}),
                    new Node({"key" : 11, "value": new Object()}),
                    new Node({"key" : 8, "value": new Object()}),
                    new Node({"key" : 3, "value": new Object()}),
                    new Node({"key" : 10, "value": new Object()}),
                    new Node({"key" : 78, "value": new Object()}),
                    new Node({"key" : 34, "value": new Object()}),
                    new Node({"key" : 27, "value": new Object()}),
                    new Node({"key" : 18, "value": new Object()}),
                    new Node({"key" : 39, "value": new Object()})
                
                ];

                var tree = new BinarySearchTree();

                for(var i in nodes) {

                    tree.insert(nodes[i]);
                    $div.innerHTML = $div.innerHTML + "    " + nodes[i].key;
                
                }

                var arr = [];
                tree.mediaSort(tree.rootNode, arr);

                for(var i in arr) {
                
                    div.innerHTML = div.innerHTML + "    " + arr[i];
                
                }
            
            }

            //节点
            function Node(args) {
            
                this.key = args.key;
                this.value = args.value;
                this.leftNode = null;
                this.rigthNode = null;
                this.isVisited = false;
            
            }

            function BinarySearchTree() {
            
                this.rootNode = null;
            
            }

            BinarySearchTree.prototype = {
            
                //插入节点
                "insert" : function(node) {
                
                    if(this.rootNode == null) {//根节点不存在
                    
                        this.rootNode = node;
                    
                    } else {//根节点存在
                    
                        var currentNode = this.rootNode;

                        while(true) {

                            if(node.key < currentNode.key) {//插入到左子树
                            
                                if(currentNode.leftNode == null) {

                                    currentNode.leftNode = node;
                                    break;
                                
                                } else {
                                
                                    currentNode = currentNode.leftNode;
                                
                                }
                            
                            } else if(node.key > currentNode.key) {//插入到右子树
                            
                                if(currentNode.rightNode == null) {
                                
                                    currentNode.rightNode = node;
                                    break;
                                
                                } else {
                                
                                    currentNode = currentNode.rightNode;

                                }

                            } else {//key已存在
                            
                                alert("key已存在, 无法插入");
                                break;
                            
                            }    
                        
                        }
                    
                    }
                
                },

                //搜索节点
                "search" : function(key, node) {

                    var flag = false;

                    if(node == null) return;

                    if(key < node.key) {
                    
                        flag = this.search(key, node.leftNode);
                    
                    } else if(key > node.key) {
                    
                        flag = this.search(key, node.rightNode);

                    } else {
                    
                        flag = true;
                        return flag;

                    }

                    return flag;
                
                },

                //中序遍历排序
                "mediaSort" : function(node, arr) {
                
                    if(!node) return;

                    node.isVisited = false;
                    
                    if(node.leftNode != null && !node.leftNode.isVisited) {
                    
                        this.mediaSort(node.leftNode, arr);
                        arr.push(node.key);
                        this.mediaSort(node.rightNode, arr);
                    
                    } else {
                    
                        arr.push(node.key);
                        node.isVisited = true;
                        this.mediaSort(node.rightNode, arr);
                    }
                    
                }
            
            };


        </script>
        
    </head>

    <body>
        <div style="text-align: center; ">
            <font color="purple" size="14">二叉搜索树排序</font>
            <div id="seq" style="margin-top:30px;">原序列: </div>
            <div id="cnt">中序遍历: </div>
        </div>

    </body>

</html>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics