• 后序排列详解


     //后序遍历
        function postOrder(tree) {
            console.log(tree);
            if (tree !== null) {
                postOrder(tree.firstElementChild);
                postOrder(tree.lastElementChild);
                traverse.push(tree);
            }
        }
    postOrder(tree.firstElementChild) = A,     postOrder(tree.lastElementChild) = b       数组traverse = C
    函数执行过程 前三次执行函数A,得到tree = 1,2,3,4 , 添加4,返回到3,将3作为参数执行B函数,得到4,添加4,然后添加3,冒泡到2,将2作为参数执行B函数,得到3,将3作为参数执行A,得到4,添加4,将3作为参数执行B,得到4,
    B = 3,4,先添加4,再添加3,接着添加A的2,然后冒泡到1,将1作为参数执行B,得到2,将2作为参数执行A,得到3,将3作为参数再执行A,得到4,添加4,添加3之前将3作为参数执行B,得到4,添加4,接着添加3;冒泡到2;将2作为参数执行B;得到3;将3作为参数执行A,得到4,添加4,接着将3作为参数执行B,得到4,添加4,接着添加B的2,最后添加1
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>Binary Tree</title>
        <link rel="stylesheet" href="styles/reset.css">
        <link rel="stylesheet" href="styles/main.css">
    </head>
    
    <body>
    <div class="box-container">
        <div class="level-1" id="top-level">
            <div class="level-2">
                <div class="level-3">
                    <div class="level-4"></div>
                    <div class="level-4"></div>
                </div>
                <div class="level-3">
                    <div class="level-4"></div>
                    <div class="level-4"></div>
                </div>
            </div>
            <div class="level-2">
                <div class="level-3">
                    <div class="level-4"></div>
                    <div class="level-4"></div>
                </div>
                <div class="level-3">
                    <div class="level-4"></div>
                    <div class="level-4"></div>
                </div>
            </div>
        </div>
    </div>
    
    <div class="btn-container">
        <input type="button" value="前序遍历" id="preorder">
        <input type="button" value="中序遍历" id="inorder">
        <input type="button" value="后序遍历" id="postorder">
    </div>
    
    
    
    <script>
        var traverse = [];
        var timer;
        //先序遍历
        function preOrder(tree) {
            if (tree !== null) {
                traverse.push(tree);
                preOrder(tree.firstElementChild);
                preOrder(tree.lastElementChild);
            }
        }
        //中序遍历
        function inOrder(tree) {
            console.log(tree);
            if (tree !== null) {
                inOrder(tree.firstElementChild);
                traverse.push(tree);
                inOrder(tree.lastElementChild);
    
            }
        }
        //后序遍历
        function postOrder(tree) {
            console.log(tree);
            if (tree !== null) {
                postOrder(tree.firstElementChild);
                postOrder(tree.lastElementChild);
                traverse.push(tree);
            }
        }
    
        window.onload = function () {
            var domTree = document.getElementById("top-level");
            document.getElementById("preorder").onclick = function () {
                clearTraverse();
                preOrder(domTree);
                animate(traverse);
                console.log(traverse);
            };
    
            document.getElementById("inorder").onclick = function () {
                clearTraverse();
                inOrder(domTree);
                animate(traverse);
                console.log(traverse);
            };
            document.getElementById("postorder").onclick = function () {
                clearTraverse();
                postOrder(domTree);
                animate(traverse);
                console.log(traverse);
            }
        };
    
        //清理前一个遍历
        function clearTraverse() {
            var allDiv = document.getElementsByTagName("div");
            for (var i = 0; i < allDiv.length; i++) {
                allDiv[i].setAttribute("background","#fff");
            }
            clearInterval(timer);
            traverse = [];
        }
    
        //将遍历结果用动画展示
        function animate(traverse) {
            var i = 0;
            traverse[i].style.background = "#fec8b0";
            timer = setInterval(function () {
                i++;
                if (i < traverse.length) {
                    traverse[i - 1].style.background = "#fff";
                    traverse[i].style.background = "#fec8b0"
                }
                else {
                    clearTraverse();
                    traverse[traverse.length - 1].style.background = "#fff";
                }
            },500);
        }
    
    
    </script>
    </body>
    
    </html>
    

      

  • 相关阅读:
    从小白到全栈的前端学习路径
    Vue初学者可能不知道的坑
    vue的基础使用
    15-浮动
    02-css的选择器
    深入理解JavaScript的闭包
    深入理解JavaScript的闭包,前戏— 作用域和词法作用域
    JavaScript简介
    02-HTML5新的input属性
    springboot+spring session+redis+nginx实现session共享和负载均衡
  • 原文地址:https://www.cnblogs.com/jgwz/p/6528342.html
Copyright © 2020-2023  润新知