后序排列详解

 //后序遍历
    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>

  

原文地址:https://www.cnblogs.com/jgwz/p/6528342.html