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实现ping
Oct 09 PHP
如何使用PHP中的字符串函数
Nov 24 PHP
php在线生成ico文件的代码
Oct 09 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
解析CodeIgniter自定义配置文件
Jun 18 PHP
php中函数前加&amp;符号的作用分解
Jul 08 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
Oct 29 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
使用PHP实现下载CSS文件中的图片
Dec 06 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
Oct 14 PHP
PDO::commit讲解
Jan 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
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
PHP中防止SQL注入方法详解
2014/12/25 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
angular十大常见问题
2017/03/07 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
上海期货面试题
2014/01/31 面试题
编写一个类体现构造,公有,私有方法,静态,私有变量
2013/08/10 面试题
公司会计主管岗位责任制
2014/03/01 职场文书
小小商店教学反思
2014/04/27 职场文书
个性车贴标语
2014/06/24 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python