经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
[PHP]算法-二叉树中和为某一值的路径的PHP实现
来源:cnblogs  作者:陶士涵  时间:2018/10/11 9:26:24  对本文有异议
  1. 二叉树中和为某一值的路径:
  2. 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
  3. 思路:
  4. 1.二叉树的前序遍历,中左右顺序
  5. 2.把目标值target传进去,target-=val
  6. 3.target0并且leftright都为null,达到叶结点
  7. 4.函数外部两个数组,list数组存一条路径,listAll数组存所有路径
  8. FindPath(root,target)
  9. if root==null return listAll
  10. list[]=root.val
  11. target-=root.val
  12. if target==0 && root->left==null && root->right==null
  13. listAll[]=list
  14. FindPath(root->left,target)
  15. FindPath(root->right,target)
  16. //如果到了这条路径的跟结点,并没有达到目标,就删掉最后的结点,退回上一个结点
  17. array_pop(list)
  18. return listAll
  1. <?php
  2. class TreeNode{
  3. var $val;
  4. var $left = NULL;
  5. var $right = NULL;
  6. function __construct($val){
  7. $this->val = $val;
  8. }
  9. }
  10. function FindPath($root,$target)
  11. {
  12. static $list=array();
  13. static $listAll=array();
  14. if($root==null){
  15. return $listAll;
  16. }
  17. $target-=$root->val;
  18. $list[]=$root->val;
  19. if($target==0 && $root->left==null && $root->right==null){
  20. $listAll[]=$list;
  21. }
  22. FindPath($root->left,$target);
  23. FindPath($root->right,$target);
  24. array_pop($list);
  25. return $listAll;
  26. }
  27. $node10=new TreeNode(10);
  28. $node5=new TreeNode(5);
  29. $node12=new TreeNode(12);
  30. $node4=new TreeNode(4);
  31. $node7=new TreeNode(7);
  32. $node10->left=$node5;
  33. $node10->right=$node12;
  34. $node5->left=$node4;
  35. $node5->left=$node7;
  36. $tree=$node10;
  37. $res=FindPath($tree,22);
  38. var_dump($res);
  1. <?php
  2. /*class TreeNode{
  3. var $val;
  4. var $left = NULL;
  5. var $right = NULL;
  6. function __construct($val){
  7. $this->val = $val;
  8. }
  9. }*/
  10. function FindPath($root,$target)
  11. {
  12. $list=array();
  13. $listAll=array();
  14. $res=dfs($root,$target,$list,$listAll);
  15. return $res;
  16. }
  17. function dfs($root,$target,&$list,&$listAll)
  18. {
  19. if($root==null){
  20. return $listAll;
  21. }
  22. $target-=$root->val;
  23. $list[]=$root->val;
  24. if($target==0 && $root->left==null && $root->right==null){
  25. $listAll[]=$list;
  26. }
  27. dfs($root->left,$target,$list,$listAll);
  28. dfs($root->right,$target,$list,$listAll);
  29. array_pop($list);
  30. return $listAll;
  31. }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号