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将数据库中所有内容生成静态html文档的代码
Apr 12 PHP
PHP随机生成随机个数的字母组合示例
Jan 14 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
May 04 PHP
php中创建和调用webservice接口示例
Jul 25 PHP
php几个预定义变量$_SERVER用法小结
Nov 07 PHP
PHP 反射(Reflection)使用实例
May 12 PHP
php递归实现无限分类的方法
Jul 28 PHP
Zend Framework实现多服务器共享SESSION数据的方法
Mar 22 PHP
PHP扩展框架之Yaf框架的安装与使用
May 18 PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 PHP
yii2使用gridView实现下拉列表筛选数据
Apr 10 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 11 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代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
Js面试算法详解
2018/04/08 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
Python新手学习函数默认参数设置
2020/06/03 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
伯克斯奥特莱斯:Burkes Outlet
2019/03/30 全球购物
计算机通信专业推荐信
2014/02/22 职场文书
浅谈Redis主从复制以及主从复制原理
2021/05/29 Redis