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 相关文章推荐
用缓存实现静态页面的测试
Dec 06 PHP
自动生成文章摘要的代码[PHP 版本]
Mar 20 PHP
PHP多线程抓取网页实现代码
Jul 22 PHP
PHP 代码规范小结
Mar 08 PHP
ThinkPHP模板判断输出Defined标签用法详解
Jun 30 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
php数组索引与键值操作技巧实例分析
Jun 24 PHP
ajax+php控制所有后台函数调用
Jul 15 PHP
php递归实现无限分类的方法
Jul 28 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
May 02 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
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
JS如何生成动态列表
2020/09/22 Javascript
Python的函数的一些高阶特性
2015/04/27 Python
python生成验证码图片代码分享
2016/01/28 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
python打开使用的方法
2019/09/30 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
党员承诺书格式
2014/05/21 职场文书
财务管理专业自荐书
2014/09/02 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android