求教大家一个小算法问题
树状流程图:
表结构
这个表结构就是每个节点都有三个子节点,left、center、right,要求就是在适当的位置插入节点,插入的规则就是:假设从id=1开始,然后找出其下的三个子节点,如果三个子节点都存在,就分别查找三个子节点的子节点。直到所在的子节点没有数据,就可以插入了
具体流程走法:如树状图:id = 1开始查找,查找其子节点,有2 ,3, 4,都是存在的,然后在查找2的子节点,5,6,7也都是存在的,然后在查找3的子节点,只有8,然后就可以在3的中间的子节点插入了。当然数据越多,查找的也会越多。一直在想,没想出来,急的很,希望大神给个具体代码的算法,万分感谢。
------解决思路----------------------
以前在网上找到的php二叉树,我改了一点,变成三叉树,其实就加了个center
<br />class Node {<br /> public $data = null;<br /> public $parent = null;<br /> public $left = null;<br /> public $center =null;<br /> public $right = null;<br />}<br /><br />function build_cbtree($a) {<br /> $root = new Node();<br /> $root->data = $a[0];<br /> for ($i = 1; $i < count($a); $i++) {<br /> $node = new Node();<br /> $node->data = $a[$i];<br /> insert_node($root, $node);<br /> }<br /> return $root;<br />}<br /><br />function insert_node($root, $inode) {<br /> $queue = array();<br /> array_unshift($queue, $root);<br /> while (!empty($queue)) {<br /> $cnode = array_pop($queue);<br /> if ($cnode->left == null) {<br /> $cnode->left = $inode;<br /> $inode->parent = $cnode;<br /> return $root;<br /> } else {<br /> array_unshift($queue, $cnode->left); <br /> }<br /> if ($cnode->center == null) {<br /> $cnode->center = $inode;<br /> $inode->parent = $cnode;<br /> return $root;<br /> } else {<br /> array_unshift($queue, $cnode->center);<br /> }<br /> if ($cnode->right == null) {<br /> $cnode->right = $inode;<br /> $inode->parent = $cnode;<br /> return $root;<br /> } else {<br /> array_unshift($queue, $cnode->right);<br /> }<br /> }<br /> return $root;<br />}<br />//广度优先遍历(先遍历一层,再遍历下一层)<br />function bf_traverse($root) {<br /> $queue = array();<br /> array_unshift($queue, $root);<br /> while (!empty($queue)) {<br /> $cnode = array_pop($queue);<br /> echo $cnode->data . " ";<br /> if ($cnode->left !== null) array_unshift($queue, $cnode->left);<br /> if ($cnode->center !== null) array_unshift($queue, $cnode->center);<br /> if ($cnode->right !== null) array_unshift($queue, $cnode->right);<br /> }<br />}<br /><br />$a = array(1,2,3,4,5,6,7,8);<br />//先把数组变成三叉树<br />$root = build_cbtree($a);<br /><br />echo "<pre class="brush:php;toolbar:false">";<br />print_r($root);<br />echo "";
bf_traverse($root);
/*$root数据太多就不打出来了
根据广度优先遍历规则得
1 2 3 4 5 6 7 8
*/
//此时$root就是一个三叉树
//插入9,其实就是重复build_cbtree的方法中for循环的代码
$node1 = new Node();
$node1->data =9;
insert_node($root, $node1);
echo "
";<br>print_r($root);<br>echo "";
bf_traverse($root);
/*
Node Object
(
[data] => 1
[parent] =>
[left] => Node Object
(
[data] => 2
[parent] => Node Object
*RECURSION*
[left] => Node Object
(
[data] => 5
[parent] => Node Object
*RECURSION*
[left] =>
[center] =>
[right] =>
)
[center] => Node Object
(
[data] => 6
[parent] => Node Object
*RECURSION*
[left] =>

TOOPTIMIZEPHPCODEFORDUSEMEMORYUSAGEAGEAGEAGEAGEAGEANDEXECUTITIEM,关注台词:1)USEREEREFERESCENCENCINCOPYINSTEADOFCOPYINGINATATASTRUCTURESTROUCTURESTOREDUCEMORYCONSUMPTION.2)杠杆phphppphpphp'sbuilt intimpunctionslikearray_mapforfunctionslikearray_mapforfforfforfforfasterapasterexecution.3)

phpisusedforsendendemailsduetoitsignegrationwithservermailservicesand andexternalsmtpproviders,自动化notifications andMarketingCampaigns.1)设置设置yourphpenvironcormentswironmentswithaweberswithawebserverserverserverandphp,确保themailfunctionisenabled.2)useabasicscruct

发送电子邮件的最佳方法是使用PHPMailer库。1)使用mail()函数简单但不可靠,可能导致邮件进入垃圾邮件或无法送达。2)PHPMailer提供更好的控制和可靠性,支持HTML邮件、附件和SMTP认证。3)确保正确配置SMTP设置并使用加密(如STARTTLS或SSL/TLS)以增强安全性。4)对于大量邮件,考虑使用邮件队列系统来优化性能。

CustomHeadersheadersandAdvancedFeaturesInphpeMailenHanceFunctionalityAndreliability.1)CustomHeadersheadersheadersaddmetadatatatatataatafortrackingandCategorization.2)htmlemailsallowformattingandttinganditive.3)attachmentscanmentscanmentscanbesmentscanbestmentscanbesentscanbesentingslibrarieslibrarieslibrariesliblarikelikephpmailer.4)smtppapapairatienticationaltication enterticationallimpr

使用PHP和SMTP发送邮件可以通过PHPMailer库实现。1)安装并配置PHPMailer,2)设置SMTP服务器细节,3)定义邮件内容,4)发送邮件并处理错误。使用此方法可以确保邮件的可靠性和安全性。

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

使用依赖注入(DI)的原因是它促进了代码的松耦合、可测试性和可维护性。1)使用构造函数注入依赖,2)避免使用服务定位器,3)利用依赖注入容器管理依赖,4)通过注入依赖提高测试性,5)避免过度注入依赖,6)考虑DI对性能的影响。

phperformancetuningiscialbecapeitenhancesspeedandeffice,whatevitalforwebapplications.1)cachingwithapcureduccureducesdatabaseloadprovesrovesponsemetimes.2)优化


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

WebStorm Mac版
好用的JavaScript开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境