• 二叉树的前序、中序、后序遍历


    一、先序遍历:

    1) 递归实现

    function preOrder(root){if(root!=null){
            console.log(root);
            preOrder(root.leftChild);
            preOrder(root.rightChild);
        }
    }

     2) 非递归实现

    function preOrder(root){
        var arr=[];
        var temp=[];
        temp.push(root);
        while(temp!=null){
            var a=temp.pop();
            arr.push(a);
            temp.push(a.rightChild);
            temp.push(a.leftChild);
        }
        return arr;
    }
    function preOrder(root){
        var temp=[];
        var result=[];
        var node=root;
        while(node!=null||temp.length>0){
            if(node!=null){
                result.push(node);
                temp.push(node);
                node=node.leftChild;
            }else{
                node=temp.pop();
                node=node.rightChild();
            }
        }
        return result;
    }

    二、中序遍历

    1) 递归

    function inOrder(root){
        if(root!=null){
            inOrder(root.leftChild);
            console.log(root);
            inOrder(root.rightChild);
        }
    }

    2) 非递归

    function inOrder(root){
        var arr=[];
        var result=[];
        var node=root;
        while(node!=null||arr.length>0){
             if(node!=null){
               arr.push(node);
               node=node.leftChild;
             }else{
               node=arr.pop();
               result.push(node);
               node=node.rightChild;
            }
        }
       return result;
    }

    三、后序遍历

    1) 递归

    function postOrder(root){
        if(root!=null){
            postOrder(root.leftChild);
            postOrder(root.rightChild);
            console.log(root);
        }
    }

    2) 非递归

    function postOrder(root){
        var temp1=[];
        var temp2=[];
        var result=[];
        var node=root;
        while(node!=null||temp1.length>0){
            if(node!=null){
                temp1.push(node);
                temp2.push(node);
                node=node.rightChild;
            }else{
                node=temp1.pop();
                node=node.leftChild;
            }
        }
        while(temp2.length>0){
           result.push(temp2.pop());
        }
        return result;
    }
  • 相关阅读:
    中国气象局所有城市代码
    Android项目源码混淆问题解决方法
    跳转到系统默认的Home
    jsp四个属性范围的比较
    response内置对象学习
    jsp登陆程序实现
    request内置对象学习
    JavaBean的学习
    android编程中的琐碎知识点汇总(5)
    android编程中的琐碎知识点汇总(4)
  • 原文地址:https://www.cnblogs.com/YangqinCao/p/5898259.html
Copyright © 2020-2023  润新知