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 email邮箱正则
Oct 08 PHP
ajax php 实现写入数据库
Sep 02 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
PHP 遍历文件实现代码
May 04 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
May 25 PHP
PHP操作数组的一些函数整理介绍
Jul 17 PHP
PHP 代码规范小结
Mar 08 PHP
解析PHP中常见的mongodb查询操作
Jun 20 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
Jun 28 PHP
php时间戳格式化显示友好的时间函数分享
Oct 21 PHP
php中随机函数mt_rand()与rand()性能对比分析
Dec 01 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 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
PHP5多态性与动态绑定介绍
2015/04/03 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
javascript,jquery闭包概念分析
2010/06/19 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
jquery Mobile入门—外部链接切换示例代码
2013/01/08 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
javascript先序遍历DOM树的方法
2016/02/27 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
原生JavaScript实现todolist功能
2018/03/02 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
Python工程师面试必备25条知识点
2018/01/17 Python
Python yield与实现方法代码分析
2018/02/06 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
Python中bisect的用法及示例详解
2020/07/20 Python
python用分数表示矩阵的方法实例
2021/01/11 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
电子商务专业学生的学习自我评价
2013/10/27 职场文书
2014年上半年工作自我评价
2014/01/18 职场文书
中秋节超市促销方案
2014/01/30 职场文书
授权委托书怎么写
2014/04/03 职场文书
我的梦想演讲稿
2014/04/30 职场文书
小学校长先进事迹材料
2014/05/13 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang
浅析python中特殊文件和特殊函数
2022/02/24 Python
golang生成vcf通讯录格式文件详情
2022/03/25 Golang
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript