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 相关文章推荐
图书管理程序(一)
Oct 09 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
Sep 13 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
PHP 下载文件时自动添加bom头的方法实例
Jan 10 PHP
ThinkPHP模板判断输出Defined标签用法详解
Jun 30 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
PHP中list方法用法示例
Dec 01 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
php静态成员方法和静态的成员属性的使用方法
Oct 26 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把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
浅谈json_encode用法
2015/03/05 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
浅谈PHP进程管理
2019/03/08 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
prettify 代码高亮着色器google出品
2010/12/28 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
python增加矩阵维度的实例讲解
2018/04/04 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
python处理RSTP视频流过程解析
2020/01/11 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
硕士研究生自我鉴定范文
2013/12/27 职场文书
先进德育工作者事迹材料
2014/01/24 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
公司放假通知怎么写
2015/04/15 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python