树(tree)在数据结构还是很重要的,这里表示二叉树用括号表示法表示。先写一个二叉树节点类:
// 二叉树节点
class btnode {
public $data;
public $lchild = null;
public $rchild = null;
public function __construct($data) {
$this->data = $data;
}
}
然后构造二叉树:
function createbtnode(&$root,string $str)
{
$strarr = str_split($str);
$stack = [];
$p = null; // 指针
$top = -1;
$k = $j = 0;
$root = null;
foreach ($strarr as $ch) {
switch ($ch) {
case '(':
$top++;
array_push($stack, $p);
$k = 1;
break;
case ')':
array_pop($stack);
break;
case ',':
$k = 2;
break;
default:
$p = new btnode($ch);
if($root == null) {
$root = $p;
} else {
switch ($k) {
case 1:
end($stack)->lchild = $p;
break;
case 2:
end($stack)->rchild = $p;
break;
}
}
break;
}
}
}
这里写上一个打印二叉树的函数(中序遍历):
function printbtnode($node)
{
if($node != null) {
printbtnode($node->lchild);
echo $node->data;
printbtnode($node->rchild);
}
}
运行结果:
输入一个字符串
"a(b(c,d),g(f))"
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持硕编程。
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!