博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 输入一棵二叉树和一个数字n,要求找出路径和为n的所有路径
阅读量:6830 次
发布时间:2019-06-26

本文共 2394 字,大约阅读时间需要 7 分钟。

1 
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 "
";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 "
";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

转载地址:http://wktkl.baihongyu.com/

你可能感兴趣的文章
JS中isPrototypeOf 和hasOwnProperty 的区别 ------- js使用in和hasOwnProperty获取对象属性的区别...
查看>>
CVE-2014-4114 和 CVE-2014-3566
查看>>
java-servlet的url-pattern匹配规则详细描述
查看>>
linux命令总结
查看>>
在网页中使用SVG
查看>>
spring事物配置,声明式事务管理和基于@Transactional注解的使用
查看>>
zen:do more with less and faster
查看>>
Accessing Jython from Java Without Using jythonc
查看>>
ubuntu 端口使用情况
查看>>
Alchemy环境的搭建
查看>>
多重背包题目
查看>>
排序总结
查看>>
数字转换枚举
查看>>
strlen和sizeof的差别
查看>>
【leetcode】Decode Ways(medium)
查看>>
图像处理之canny---求梯度
查看>>
B/S 网站技术选型
查看>>
sql:将秒转化成时分秒格式
查看>>
EXCLE使用宏生成目录
查看>>
GDB 完全教程
查看>>