1 <?php
 2     #输入一棵二叉树和一个数字n,要求找出路径和为n的所有路径
 3
 4     class Node {
 5         public $data = null;
 6         public $parent = null;
 7         public $left = null;
 8         public $right = null;
 9     }
10
11     #使用数组构造完全二叉树
12     function build_cbtree($a) {
13         $root = new Node();
14         $root->data = $a[0];
15
16         for ($i = 1; $i < count($a); $i++) {
17             $node = new Node();
18             $node->data = $a[$i];
19             insert_node($root, $node);
20         }
21
22         return $root;
23     }
24
25     #插入完全二叉树节点
26     function insert_node($root, $inode) {
27         #使用树的广度优先遍历顺序取出节点,直到找到第一个左右子节点没满的节点,将待插入节点插入节点左边或右边
28         $queue = array();
29         array_unshift($queue, $root);
30
31         while (!empty($queue)) {
32             $cnode = array_pop($queue);
33             if ($cnode->left == null) {
34                 $cnode->left = $inode;
35                 $inode->parent = $cnode;
36                 return $root;
37             } else {
38                 array_unshift($queue, $cnode->left);
39             }
40             if ($cnode->right == null) {
41                 $cnode->right = $inode;
42                 $inode->parent = $cnode;
43                 return $root;
44             } else {
45                 array_unshift($queue, $cnode->right);
46             }
47         }
48
49         return $root;
50     }
51
52     #树的广度优先遍历
53     function bf_traverse($root) {
54         $queue = array();
55         array_unshift($queue, $root);
56
57         while (!empty($queue)) {
58             $cnode = array_pop($queue);
59             echo $cnode->data . " ";
60             if ($cnode->left !== null) array_unshift($queue, $cnode->left);
61             if ($cnode->right !== null) array_unshift($queue, $cnode->right);
62         }
63
64         echo "<br>";
65     }
66
67     function get_paths($root, $paths, $sum) {
68         if ($root != null) {
69             $sum -= $root->data;
70             $paths[] = $root->data;
71
72             if ($sum > 0) {
73                 #继续递归
74                 #此处paths是传值调用,所以可以算出多条路径而互不影响
75                 if ($root->left != null) get_paths($root->left, $paths, $sum);
76                 if ($root->right != null) get_paths($root->right, $paths, $sum);
77             } else if ($sum == 0) {
78                 #输出路径
79                 foreach ($paths as $val) {
80                     echo $val . " ";
81                 }
82                 echo "<br>";
83             }
84         }
85     }
86
87     $a = array(9, 8, 7, 6, 8, 4, 3, 2, 1);
88     $root = build_cbtree($a);
89     bf_traverse($root); #广度优先遍历
90     $b = array();
91     get_paths($root, $b, 25); #输出路径和为25的路径
92 ?>

9 8 7 6 8 4 3 2 1 
9 8 6 2 
9 8 8

转载于:https://www.cnblogs.com/zemliu/archive/2012/09/27/2706181.html

PHP 输入一棵二叉树和一个数字n,要求找出路径和为n的所有路径相关推荐

  1. 剑指offer:输入一棵二叉树,判断该二叉树是否是平衡二叉树。

    输入一棵二叉树,判断该二叉树是否是平衡二叉树. //后续遍历二叉树,遍历过程中求子树高度,判断是否平衡 class Solution { public:bool IsBalanced(TreeNode ...

  2. python判断输入的内容是否为一个数字(整数、负数)

    python判断输入的内容是否为一个数字 isdigit() 方法检测字符串是否只由数字组成,返回True或False def is_number(s):s = str(s)if s.count('. ...

  3. 一棵二叉树的中根线索二叉树_二叉树面试题刷题模板(终极版)

    树结构 二叉树的最大深度 后序递归 二叉树最小深度 后序递归 二叉树的直径 后序递归 平衡二叉树 后序递归 小总结 对称的二叉树 递归解法 二叉树的镜像 后序递归 树的子结构 递归解法 二叉搜索树的最 ...

  4. python编程输入图形_python编程,输入一个字符,用该字符输出一下图形,是一个数字6,用*表示6...

    展开全部 # encoding:utf-8 # python3.6 # 定义数字对应的字符字典 c_number = {0: [[1, 1, 1], [1, 0, 1], [1, 0, 1], [1, ...

  5. 表达式类型( 一个表达式和一棵二叉树之间,存在着自然的对应关系。写一个程序,实现 基于二叉树表示的算术表达式Expression的操作)

    文章目录 题目描述 黑框运行的代码 黑框代码下载链接 QT完成页面的代码下载链接 题目描述 一个表达式和一棵二叉树之间,存在着自然的对应关系.写一个程序,实现 基于二叉树表示的算术表达式Express ...

  6. 用户输入一个数字,找到所有能够除尽它的数的总个数

    想不到我这个小学生也会做 <!DOCTYPE html> <html lang="en"> <head>  <meta charset=& ...

  7. ACMNO.13求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。 输入 n 输出 和 样例输入 5 样例输出 153

    题目描述 求Sn=1!+2!+3!+4!+5!+-+n!之值,其中n是一个数字. 输入 n 输出 和 样例输入 5 样例输出 153 来源/分类 C语言 题目截图: 思路: 首先要想到使用两个for循 ...

  8. ACMNO.9求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。 例如:2+22+222+2222+22222(n=5),n由键盘输入。 输入 n 输出 a=2 时

    题目描述 求Sn=a+aa+aaa+-+aa-aaa(有n个a)之值,其中a是一个数字. 例如:2+22+222+2222+22222(n=5),n由键盘输入. 输入 n 输出 a=2 时的Sn 样例 ...

  9. 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...

    已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...

最新文章

  1. 用Rhino V7建造机甲学习教程 Building a Mecha using Rhino V7
  2. android使用okthtp
  3. eclipse java 运行快捷键_java – 可以使用Eclipse中的键盘快捷方式启动/停止Tomcat吗?...
  4. Python爬虫实战之(五)| 模拟登录wechat 1
  5. 国际空间站20年花掉超千亿美金,一些人开始觉得它“没啥用”了
  6. box2dweb 学习笔记--sample讲解
  7. (转)Oracle中通过位图索引提高查询效率
  8. 第二个冲刺周期第五天
  9. 2019年12月7日pmp考试成都在哪考
  10. 17AHU排位赛2 E题(树上最大匹配,树形DP)
  11. Android中 手机震动功能的实现
  12. sci结构及写作顺序
  13. Springboot实现拦截器功能
  14. api-String
  15. 排除万难,从入门到精通区块链
  16. MySQL 5.7--------多实例部署最佳实战
  17. 【图像处理 直方图 OpenCV实现】
  18. 2022-2028全球氢化镁行业调研及趋势分析报告
  19. ipad iphone开发_如何更快地为iPhone或iPad充电
  20. Java实现简单的贪吃蛇

热门文章

  1. 最短路径和最小生成树的区别
  2. 深度优先遍历(DFS)- Letter CasePermutation - Combinations
  3. SQL的简单增、删、改
  4. google浏览器不能登录
  5. C++的STL标准库学习(vector)
  6. 吴恩达神经网络和深度学习-学习笔记-35-残差网络(Residual Network)
  7. quartus仿真系列2:74193功能
  8. 纯小白成功安装交叉编译工具arm-none-eabi-gcc
  9. react-navigation createBottomTabNavigator 刷新问题
  10. [洛谷P1156][codevs1684]垃圾陷阱