zoukankan      html  css  js  c++  java
  • 多叉树到指定节点的路径

    基本上是使用深度优先遍历的套路,以下方法获取的是沿途的所有节点

    export function getPathNodesByKey(root,stack,fCompare) {
        let b = false;
        if (root != null) {  
            stack.push(root);  
            if(fCompare(root)){return true}
            var children = root.children;
            if(children){
                for (var i = 0; i < children.length; i++){
                    b = getPathByKey(children[i],stack,fCompare);  
                    if(b){
                        break;
                    }
                } 
            }  
            if(!b){
                stack.pop();
            } 
        }  
        return b;
    }
    
    export function getAllPathNodesByKey(root,stack,fCompare) {
        let b = false;
        if (root != null) {  
            stack.push(root);  
            if(fCompare(root)){return true}
            var children = root.children;
            if(children){
                for (var i = 0; i < children.length; i++){
                    b = getAllPathByKey(children[i],stack,fCompare);
                } 
            }  
            if(!b){
                stack.pop();
            } 
        }  
        return b;
    }

    获取沿途所有路径

    function getAllPathByKey(root,stack,fCompare,res) {
        if(root == null){
            return;
        }
        stack.push(root);  
        if(fCompare(root)){
            res.push(JSON.parse(JSON.stringify(stack)));
            return;
        }
        var children = root.children;
        if(children){
            for (var i = 0; i < children.length; i++){
                getAllPathByKey(children[i],stack,fCompare,res);  
                stack.pop();
            } 
        }  
    }
    
    function getFisrtPathByKey(root,stack,fCompare,res) {
        if(root == null){
            return;
        }
        stack.push(root);  
        if(fCompare(root)){
            res.push(JSON.parse(JSON.stringify(stack)));
            return true;
        }
        var children = root.children;
        if(children){
            for (var i = 0; i < children.length; i++){
                let hasNode = getFisrtPathByKey(children[i],stack,fCompare,res);  
                stack.pop();
                if(hasNode){
                    return true;
                }
            } 
        }  
    }

  • 相关阅读:
    redhat6.4 数据包无法到达
    hibernate-Table 'XXX.XXX' doesn't exist
    LeetCode 之 TwoSum
    vim 中的常用编辑
    linux sed 批量替换多个文件中的字符串
    RedHat 6.4企业版利用iso镜像做本地yum源
    win7 vmware虚拟机上网设置
    virtualbox ubuntu下ssh连接
    Source Insight 插件
    非递归排序
  • 原文地址:https://www.cnblogs.com/mengff/p/12204728.html
Copyright © 2011-2022 走看看