排序二叉树——前序遍历

假如看过我之前的排序二叉树的代码,我想,对于二叉树的创建流程你也会很清晰了,假如还是不了解的,我建议你在返回去看看之前介绍过的排序二叉树。为什么我们会需要用到前序遍历呢,前序遍历是什么呢?

简答的来说,前序遍历的目的就是在复制一颗同样的二叉树,你说许或说为什么要复制,直接把数组导入在运行一次就不好了?假如在节点个数较小的情况下,这样做是没有问题的,但是在要复制一个成千上万个节点的二叉树时,运算量必将会很大,这就造成我们延长了运算时间。为了降低运算量到达目的,我们就可以用到前序遍历这个方法。下面是代码:

<script type="text/javascript">
    function BinaryyTree() {
        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 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 node=[7,3,9,5,12,21,18,32];        //创建一个数组
    var binaryyTree= new BinaryyTree();    //构造一颗二叉树
    node.forEach(function (key) {            //创建一颗二叉树
        binaryyTree.insert(key);
    })
    var callback=function (key) {
        console.log(key);
    };
    binaryyTree.preOrderTraverse(callback);
</script>

最后我们在控制台输出,这里我建议一定要打开控制台,看看是否能正确输出,不能正确输出那么就说明代码哪里出错了。根据提示做出修改。你也可以在“遍历接口”到“实现流程”之间设置断点,看看程序是如何跑的。下面是在控制台的输出结果

前序遍历

陈健的个人博客,记录生活所见所感、学习笔记。专注于Web前端_SEO教程_读书心得。

2 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回主页看更多
狠狠的抽打博主 支付宝 扫一扫