PHP 输入一棵二叉树和一个数字n,要求找出路径和为n的所有路径
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的所有路径相关推荐
- 剑指offer:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
输入一棵二叉树,判断该二叉树是否是平衡二叉树. //后续遍历二叉树,遍历过程中求子树高度,判断是否平衡 class Solution { public:bool IsBalanced(TreeNode ...
- python判断输入的内容是否为一个数字(整数、负数)
python判断输入的内容是否为一个数字 isdigit() 方法检测字符串是否只由数字组成,返回True或False def is_number(s):s = str(s)if s.count('. ...
- 一棵二叉树的中根线索二叉树_二叉树面试题刷题模板(终极版)
树结构 二叉树的最大深度 后序递归 二叉树最小深度 后序递归 二叉树的直径 后序递归 平衡二叉树 后序递归 小总结 对称的二叉树 递归解法 二叉树的镜像 后序递归 树的子结构 递归解法 二叉搜索树的最 ...
- python编程输入图形_python编程,输入一个字符,用该字符输出一下图形,是一个数字6,用*表示6...
展开全部 # encoding:utf-8 # python3.6 # 定义数字对应的字符字典 c_number = {0: [[1, 1, 1], [1, 0, 1], [1, 0, 1], [1, ...
- 表达式类型( 一个表达式和一棵二叉树之间,存在着自然的对应关系。写一个程序,实现 基于二叉树表示的算术表达式Expression的操作)
文章目录 题目描述 黑框运行的代码 黑框代码下载链接 QT完成页面的代码下载链接 题目描述 一个表达式和一棵二叉树之间,存在着自然的对应关系.写一个程序,实现 基于二叉树表示的算术表达式Express ...
- 用户输入一个数字,找到所有能够除尽它的数的总个数
想不到我这个小学生也会做 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 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循 ...
- 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 样例 ...
- 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...
已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...
最新文章
- 用Rhino V7建造机甲学习教程 Building a Mecha using Rhino V7
- android使用okthtp
- eclipse java 运行快捷键_java – 可以使用Eclipse中的键盘快捷方式启动/停止Tomcat吗?...
- Python爬虫实战之(五)| 模拟登录wechat 1
- 国际空间站20年花掉超千亿美金,一些人开始觉得它“没啥用”了
- box2dweb 学习笔记--sample讲解
- (转)Oracle中通过位图索引提高查询效率
- 第二个冲刺周期第五天
- 2019年12月7日pmp考试成都在哪考
- 17AHU排位赛2 E题(树上最大匹配,树形DP)
- Android中 手机震动功能的实现
- sci结构及写作顺序
- Springboot实现拦截器功能
- api-String
- 排除万难,从入门到精通区块链
- MySQL 5.7--------多实例部署最佳实战
- 【图像处理 直方图 OpenCV实现】
- 2022-2028全球氢化镁行业调研及趋势分析报告
- ipad iphone开发_如何更快地为iPhone或iPad充电
- Java实现简单的贪吃蛇
热门文章
- 最短路径和最小生成树的区别
- 深度优先遍历(DFS)- Letter CasePermutation - Combinations
- SQL的简单增、删、改
- google浏览器不能登录
- C++的STL标准库学习(vector)
- 吴恩达神经网络和深度学习-学习笔记-35-残差网络(Residual Network)
- quartus仿真系列2:74193功能
- 纯小白成功安装交叉编译工具arm-none-eabi-gcc
- react-navigation createBottomTabNavigator 刷新问题
- [洛谷P1156][codevs1684]垃圾陷阱