二叉树算法的收集

Posted 思思博士

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树算法的收集相关的知识,希望对你有一定的参考价值。

function BinaryTree(){
            var Node=function(key){
                this.key=key;
                this.left=null;
                this.right=null;
            };
            var root=null;
            var insertNode=function(node,newNode){
                if(newNode.key<node.key){
                    if(node.left===null){
                        node.left=newNode;
                    }else{
                        insertNode(node.left,newNode);
                    }
                }else{
                    if(node.right===null){
                        node.right=newNode;
                    }else{
                        insertNode(node.right,newNode);
                    }
                }
            };
            //构建二叉树
            this.insert=function(key){
                var newNode=new Node(key);
                if(root===null){
                    root=newNode;
                }else{
                    insertNode(root,newNode);
                }
            };
            var inOrderTraverseNode=function(node,callback){
                if(node!=null){
                    inOrderTraverseNode(node.left,callback);
                    callback(node.key);
                    inOrderTraverseNode(node.right,callback);
                }
            };
            //中序排序
            this.inOrderTraverse=function(callback){
                inOrderTraverseNode(root,callback);
            };
            
            var preOrderTraverseNode=function(node,callback){
                if(node!=null){
                    callback(node.key);
                    preOrderTraverseNode(node.left,callback);
                    preOrderTraverseNode(node.right,callback);
                }
            };
            //前序遍历
            this.preOrderTraverse=function(callback){
                preOrderTraverseNode(root,callback);
            };
            
            var postOrderTraverseNode=function(node,cllback){
                if(node!=null){
                    postOrderTraverseNode(node.left,callback);
                    postOrderTraverseNode(node.right,callback);
                    callback(node.key);
                }
            };
            
            //后续遍历
            this.postOrderTraverse=function(callback){
                postOrderTraverseNode(root,callback);
            }
            var minNode=function(node){
                if(node){
                    while(node&&node.left!=null){
                        node=node.left;
                    }
                    return node.key;
                }
                return null;
            }
            
            this.min=function(){
                return minNode(root);
            };
            var maxNode=function(node){
                if(node){
                    while(node &&node.right!=null){
                        node=node.right;
                    }
                    return node.key;
                }
                return null;
            };
            
            this.max=function(){
                return maxNode(root);
            }
            var searchNode=function(node,key){
                if(node==null){
                    return false;
                }
                if(key<node.key){
                    return searchNode(node.left,key);
                }else if(key>node.key){
                    return searchNode(node.right,key);
                }else{
                    return true;
                }
            };
            
            this.search=function(key){
                return searchNode(root,key);
            };
            
            var removeNode=function(node,key){
                if(node===null){
                    return null;
                }
                if(key<node.key){
                    node.left=removeNode(node.left,key);
                    return node;
                }else if(key>node.key){
                    node.right=removeNode(node.right,key);
                    return node;
                }else{
                    if(node.left===null && node.right===null){
                        node=null;
                        return node;
                    }
                    if(node.left===null){
                        node=node.right;
                        return node;
                    }else if(node.right===null){
                        node=node.left;
                        return node;
                    }
                }
                
            }
            
            this.remove=function(key){
                root=removeNode(root,key);
            };
        }
        
        var nodes=[8,3,10,1,6,14,4,7,13];
        var binaryTree=new BinaryTree();
        nodes.forEach(function(key){
            binaryTree.insert(key);
        });
        
        var callback=function(key){
            console.log(key);
        };
        binaryTree.inOrderTraverse(callback);
        console.log("===============");
        console.log(binaryTree.remove(10));
        console.log("===============");
        binaryTree.inOrderTraverse(callback);

 

以上是关于二叉树算法的收集的主要内容,如果未能解决你的问题,请参考以下文章

数据分析应用之-二叉树算法的应用

求数据结构算法平衡二叉树实现代码

算法与数据结构二叉树的顺序存储代码

讲透学烂二叉树:二叉树的遍历图解算法步骤及JS代码

算法——建立线索二叉树

二叉树遍历算法