zoukankan      html  css  js  c++  java
  • 二叉树的前序,中序,后序,层序实现

    // 树根
    function Tree(data,left,right) {
        this.data = data
        this.left = left
        this.right = right
        this.leftNode = Tree.leftNode
        this.rightNode = Tree.rightNode
        this.PreOrderTraversal = Tree.PreOrderTraversal
        this.MidOrderTraversal = Tree.MidOrderTraversal
        this.AfterOrderTraversal = Tree.AfterOrderTraversal
        this.InorderTraversal = Tree.InorderTraversal // 采用堆栈实现中序
        this.orderTraversal = Tree.orderTraversal;
    }
    // 左节点
    Tree.leftNode = function(leftNode) {
        this.left = leftNode;
        return this;
    }
    // 右节点
    Tree.rightNode = function(rightNode) {
        this.right = rightNode;
    }
    // 前序遍历
    Tree.PreOrderTraversal = function(tree) {
        if(tree) {
            console.log(tree.data);
            this.PreOrderTraversal(tree.left);
            this.PreOrderTraversal(tree.right);
        }
    }
    // 中序遍历
    Tree.MidOrderTraversal = function(tree) {
        if(tree) {
            this.MidOrderTraversal(tree.left);
            console.log(tree.data);
            this.MidOrderTraversal(tree.right);
        }
    }
    // 后序遍历
    Tree.AfterOrderTraversal = function(tree) {
        if(tree) {
            this.AfterOrderTraversal(tree.left);
            this.AfterOrderTraversal(tree.right);
            console.log(tree.data);
        }
    }
    
    // 堆栈 非递归处理
    Tree.InorderTraversal = function(tree) {
        let stack = [];
        while(tree || stack.length > 0) {
            while(tree) {
                console.log(tree.data);
                stack.push(tree);
                tree = tree.left;
            }
            if(stack.length > 0) {
                tree = stack.pop();
                // console.log(tree.data);
                tree = tree.right;
            }
        }
    }
    
    // 层序遍历输出
    Tree.orderTraversal = function(tree) {
        let queue = [];
        if(!tree) return;
        queue.push(tree);
        while(queue.length > 0) {
            let tree = queue.shift()
            console.log(tree.data);
            if(tree.left) { queue.push(tree.left) }
            if(tree.right) { queue.push(tree.right) }
        }
    }
    
    
    
    let parent = new Tree('A');
    let b = new Tree('B');
    let c = new Tree('C');
    let d = new Tree('D');
    let e = new Tree('E');
    let f = new Tree('F');
    let g = new Tree('G');
    
    parent.leftNode(b).rightNode(c);
    b.leftNode(d).rightNode(e)
    c.leftNode(f).rightNode(g)
    
    console.log('先序遍历 == ');
    parent.PreOrderTraversal(parent);
    console.log('中序遍历 ==')
    // parent.MidOrderTraversal(parent);
    parent.InorderTraversal(parent);
    console.log('后序遍历 ==')
    parent.AfterOrderTraversal(parent);
    console.log('层序遍历 == ')
    parent.orderTraversal(parent);
  • 相关阅读:
    Python 压缩图片至指定大小
    nginx 服务器自签https协议 (Let’s Encrypt)
    Django 批量创建app
    常见的设计模式(python )———适配器模式
    带你完全理解Python中的metaclass,type,class之间的恩怨情仇...
    常见的设计模式(python)———单例模式(转载)
    常见的设计模式(python)———工厂模式
    常见的设计模型(python)——建造者模型
    Django-restframework 概述及目录
    Java多线程开发
  • 原文地址:https://www.cnblogs.com/strivegys/p/13207401.html
Copyright © 2011-2022 走看看