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 时间计算问题小结
Jan 04 PHP
php 目录与文件处理-郑阿奇(续)
Jul 04 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
Jun 17 PHP
yii实现创建验证码实例解析
Jul 31 PHP
php中 $$str 中 &quot;$$&quot; 的详解
Jul 06 PHP
php根据数据id自动生成编号的实现方法
Oct 16 PHP
THinkPHP获取客户端IP与IP地址查询的方法
Nov 14 PHP
PHP用户注册邮件激活账户的实现代码
May 31 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 PHP
PHP实现通过二维数组键值获取一维键名操作示例
Oct 11 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 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懒人函数 自动添加数据
2011/06/28 PHP
php中定时计划任务的实现原理
2013/01/08 PHP
PHP+jQuery实现自动补全功能源码
2013/05/15 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
PHP重载基础知识回顾
2020/09/10 PHP
用JavaScript隐藏控件的方法
2009/09/21 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
Python multiprocessing模块中的Pipe管道使用实例
2015/04/11 Python
浅谈Python中的私有变量
2018/02/28 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
python列表切片和嵌套列表取值操作详解
2020/02/27 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
你正在寻找的CSS3 动画技术
2011/07/27 HTML / CSS
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
公司JAVA开发面试题
2015/04/02 面试题
扬尘污染防治方案
2014/06/15 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
英雄儿女观后感
2015/06/09 职场文书