php之二叉树,PHP构造二叉树算法示例
树(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))"
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
php之二叉树,PHP构造二叉树算法示例相关推荐
- 根据二叉树序列构造二叉树
已知一棵二叉树的前序序列和中序序列,构造该二叉树的过程如下:1. 根据前序序列的第一个元素建立根结点:2. 在中序序列中找到该元素,确定根结点的左右子树的中序序列:3. 在前序序列中确定左右子树的前序 ...
- pta 是否完全二叉搜索树_二叉树:构造一棵搜索树
给「代码随想录」一个星标吧! ❝ 构造二叉搜索树,一不小心就平衡了 ❞ 108.将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指 ...
- pat根据中序遍历和先序遍历_算法题399:从前序与中序遍历序列构造二叉树
(给算法爱好者加星标,修炼编程内功) 来源: 数据结构和算法-山大王wld 问题描述 今天我们就不做关于双指针的了,我们爬到树上玩会儿,做一道关于二叉树的题.今天的题就一句话,根据一棵树的前序遍历与中 ...
- 【算法】有序链表转换二叉搜索树和从中序与后序遍历序列构造二叉树Java解答参考
三道算法题 1.有序链表转换二叉搜索树 Java代码参考 2.从中序与后序遍历序列构造二叉树 Java代码参考 3.移除元素 Java代码参考 1.有序链表转换二叉搜索树 给定一个单链表,其中的元素按 ...
- java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...
前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...
- 文兄的算法题——算术表达式递归构造二叉树
正在奋斗天津大学的文兄前两天在做算法的时候遇到了一道棘手的题目. 当然,以文兄的聪明才智都不好解决的,我看着也一脸懵逼.然而有万能的度娘,最后还是找到了解决方案.然而说的不是很详细,这里给出我和文兄对 ...
- 二叉树剪枝_数据挖掘算法:决策树算法如何学习及分裂剪枝
1.决策树模型与学习 决策树(decision tree)算法基于特征属性进行分类,其主要的优点:模型具有可读性,计算量小,分类速度快.决策树算法包括了由Quinlan提出的ID3与C4.5,Brei ...
- 树与二叉树 | 实验3:由遍历序列构造二叉树
实验3:由遍历序列构造二叉树 二叉树构造定理: 定理7.1:任何n(n>0)个不同结点的二又树,都可由它的中序序列和先序序列唯一地确定. 定理7.2:任何n(n>0)个不同结点的二又树,都 ...
- leetcode 105. 从前序与中序遍历序列构造二叉树 c语言递归解法
如题: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素.例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3 ...
最新文章
- 微服务2017年度报告出炉:4大客户画像,15%传统企业已领跑
- 如何配置IIS服务器使用的中间证书( 微软 KB954755)
- 策划文档html,html代码整理.doc
- Confluence 6 启用远程 API
- 前端学习(312):高度塌陷
- C语言学习:malloc()函数
- 从深度图里面导出边界
- rxjs为什么用的人少_工伤为什么公司不怕打官司
- 再看经典推荐算法之召回算法
- js创建10万行表格 页面显示10万行数据
- 缓存能提高多少 php,提高PHP编程效率 引入缓存机制提升性能
- 数据库安全风险行为 目录 1. 数据库安全风险行为	2 1.1. Sql注入SQLi)攻击行为	2 1.2. . 过多的、不适当的和未使用的特权	2 1.3. 2. 权限滥用(数据库系统管理员和开
- The seventh Word-Day
- Contest 1479 2018-ZZNU-ACM集训队 夏季队内积分赛 (3)K题(易水寒)
- 用html画一个企鹅图案的代码,HTML5 Canvas来绘制图形
- 灵敏度分享码显示服务器不可用,和平精英S11最稳灵敏度分享码有哪些?和平精英灵敏度设置分享码...
- plc 编程 c语言编程实例,PLC面向对象编程和梯形图编程,谁OUT了?
- OpenCV图像处理--设置和获取摄像头参数
- 听书是怎样的一种体验
- Google OAUTH + OpenID 给第三方授权