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&amp;mysql(四)
Oct 09 PHP
php 表单数据的获取代码
Mar 10 PHP
PHP自定义函数收代码
Aug 01 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
Nov 01 PHP
PHP获取中英混合字符串长度的方法
Jun 07 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
Jan 09 PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 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 数据结构 算法 三元组 Triplet
2011/07/02 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
php数据库备份还原类分享
2014/03/20 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
php跨服务器访问方法小结
2015/05/12 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
jQuery动态添加
2016/04/07 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
python实现各进制转换的总结大全
2017/06/18 Python
python机器学习实战之树回归详解
2017/12/20 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
详解Python字符串切片
2019/05/20 Python
pandas 对group进行聚合的例子
2019/12/27 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
大学毕业感言
2014/01/10 职场文书
消防器材管理制度
2014/01/28 职场文书
总经理助理工作职责
2014/02/06 职场文书
表扬稿范文
2015/01/17 职场文书
2015年工商所工作总结
2015/05/21 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL