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(6) 面向对象
Feb 16 PHP
PHP IPV6正则表达式验证代码
Feb 16 PHP
提高PHP编程效率的53个要点(经验小结)
Sep 04 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
php如何调用webservice应用介绍
Nov 24 PHP
PHP 自定义错误处理函数trigger_error()
Mar 26 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
Mar 26 PHP
PHP实现支付宝即时到账功能
Dec 21 PHP
详解Yii2.0使用AR联表查询实例
Jun 16 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 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入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
Yii2 RESTful中api的使用及开发实例详解
2016/07/06 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
Javascript - HTML的request类
2006/07/15 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
JavaScript中的依赖注入详解
2015/03/18 Javascript
jQuery EasyUi实战教程之布局篇
2016/01/26 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
python获取本机外网ip的方法
2015/04/15 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
python pygame实现挡板弹球游戏
2019/11/25 Python
python scatter函数用法实例详解
2020/02/11 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
2020/12/13 Python
python实现发送邮件
2021/03/02 Python
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
探矿工程师自荐信
2014/01/24 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
汉语拼音教学反思
2016/02/22 职场文书
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript