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;
                }
            } 
        }  
    }

  • 相关阅读:
    -Dmaven.test.skip=true 和 -DskipTests
    mysql 生成指定范围随机数
    Delphi 6 保存窗体设置
    Sql server left join,right join和inner join的比较
    Mysql配置文件my.ini详解
    网络游戏MMORPG服务器架构
    彻底删除SVN版本库中部分文件或文件夹
    高负载高并发应用 参考索引 地址
    Linux计划任务入门详解
    Linux下SVN的三种备份方式
  • 原文地址:https://www.cnblogs.com/mengff/p/12204728.html
Copyright © 2011-2022 走看看