中序遍历二叉树

来源:互联网 发布:迪杰斯特拉算法伪代码 编辑:程序博客网 时间:2024/05/17 08:54

先上代码:

<script>    var count=0;    function BinaryTree(){        var Node=function(key){            this.key=key;            this.left=null;            this.right=null;        }        var insertNode=function(node,newNode){            if(node.key>newNode.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)                }            }        }        var root=null;        this.insert=function(key){            var newNode=new Node(key);            if(root==null){                root=newNode            }else{                insertNode(root,newNode);                console.log(root);            }            console.log(count++);        }        this.inOrderTraverse=function(callback){            inOrderTraverseNode(root,callback)        }        var inOrderTraverseNode=function(node,callback){            if(node!==null){               inOrderTraverseNode(node.left,callback) ;                callback(node.key);                inOrderTraverseNode(node.right,callback)            }        }    }    var nodes=[8,3,10,1,6,14,7,13];    var binaryTree=new BinaryTree();    nodes.forEach(function(key){        binaryTree.insert(key);    })    //中序遍历二叉树    var callback=function(key){        console.log(key);    }    binaryTree.inOrderTraverse(callback)</script>

因为是接着上一篇文章《二叉树排序》,if you haven’t got last article,just click 二叉树排序

这里主要是增加了中序遍历的方法:inordertraverse和回调函数,在这个函数中,分别遍历函数的左节点,右节点;

this.inOrderTraverse=function(callback){            inOrderTraverseNode(root,callback)        }        var inOrderTraverseNode=function(node,callback){            if(node!==null){               inOrderTraverseNode(node.left,callback) ;                callback(node.key);                inOrderTraverseNode(node.right,callback)            }        }

这里为了便于观察;我们的回调函数中选择将当前的值进行打印

 var callback=function(key){        console.log(key);    }

最后我们进行调用:

binaryTree.inOrderTraverse(callback)

结果如下:

13678101314