php实现二叉树中和为某一值的路径方法


Posted in PHP onOctober 14, 2018

二叉树中和为某一值的路径:

输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)

思路:

1、二叉树的前序遍历,中左右顺序

2、把目标值target传进去,target-=val

3、target为0并且left和right都为null,达到叶结点

4、函数外部两个数组,list数组存一条路径,listAll数组存所有路径

FindPath(root,target)

  if root==null return listAll

  list[]=root.val

  target-=root.val

  if target==0 && root->left==null && root->right==null

    listAll[]=list

  FindPath(root->left,target)

  FindPath(root->right,target)

  //如果到了这条路径的跟结点,并没有达到目标,就删掉最后的结点,退回上一个结点

  array_pop(list)

  return listAll
<?php

class TreeNode{

  var $val;

  var $left = NULL;

  var $right = NULL;

  function __construct($val){

    $this->val = $val;

  }  

}

 

function FindPath($root,$target)

{

    static $list=array();

    static $listAll=array();

    if($root==null){

        return $listAll;

    }  

    $target-=$root->val;

    $list[]=$root->val;

    if($target==0 && $root->left==null && $root->right==null){

        $listAll[]=$list;

    }  

    FindPath($root->left,$target);

    FindPath($root->right,$target);

    array_pop($list);

    return $listAll;

}

 

$node10=new TreeNode(10);

$node5=new TreeNode(5);

$node12=new TreeNode(12);

$node4=new TreeNode(4);

$node7=new TreeNode(7);

 

$node10->left=$node5;

$node10->right=$node12;

$node5->left=$node4;

$node5->left=$node7;

 

$tree=$node10;

 

$res=FindPath($tree,22);

var_dump($res);
<?php

/*class TreeNode{

  var $val;

  var $left = NULL;

  var $right = NULL;

  function __construct($val){

    $this->val = $val;

  }

}*/

function FindPath($root,$target)

{

  $list=array();

  $listAll=array();

  $res=dfs($root,$target,$list,$listAll);

  return $res;

}

 

function dfs($root,$target,&$list,&$listAll)

{

 

    if($root==null){

        return $listAll;

    }  

    $target-=$root->val;

    $list[]=$root->val;

    if($target==0 && $root->left==null && $root->right==null){

         

        $listAll[]=$list;

    }  

    dfs($root->left,$target,$list,$listAll);

    dfs($root->right,$target,$list,$listAll);

    array_pop($list);

    return $listAll;

}

以上就是本次内容的全部实例代码,大家可以本次测试一下,感谢大家对三水点靠木的支持。

PHP 相关文章推荐
php中数据的批量导入(csv文件)
Oct 09 PHP
用PHP实现登陆验证码(类似条行码状)
Oct 09 PHP
YII路径的用法总结
Jul 09 PHP
thinkphp中session和cookie无效的解决方法
Dec 19 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
Feb 12 PHP
PHP生成静态HTML页面最简单方法示例
Apr 09 PHP
PHP整合七牛实现上传文件
Jul 03 PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 PHP
php获取数据库结果集方法(推荐)
Jun 01 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
Apr 12 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 #PHP
PHP通过文件路径获取文件名的实例代码
Oct 14 #PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
Oct 14 #PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 #PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
Oct 14 #PHP
PHP中常见的密码处理方式和建议总结
Oct 14 #PHP
PHP如何根据文件头检测文件类型实例代码
Oct 14 #PHP
You might like
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
基于php权限分配的实现代码
2013/04/28 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
JS采用绝对定位实现回到顶部效果完整实例
2016/06/20 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
python打开文件并获取文件相关属性的方法
2015/04/23 Python
python获取本地计算机名字的方法
2015/04/29 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
python3爬虫中异步协程的用法
2020/07/10 Python
美国网上订购鲜花:FTD
2016/09/23 全球购物
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
个人合作协议书范本
2014/04/18 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
《山中访友》教学反思
2016/02/24 职场文书
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB