php树的遍历
㈠ 什么是树的层次遍历 要求通俗易懂
二叉树的层次遍历是指从二叉树的第一层(根节点)开始,从上至下逐层遍历,在同一层中,则按照从左到右的顺序对节点逐个访问。在逐层遍历过程中,按从顶层到底层的次序访问树中元素,在同一层中,从左到右进行访问。
其思想为:用一个队列保存被访问的当前节点的左右孩子以实现层序遍历。在进行层次遍历的时候,设置一个队列结构,遍历从二叉树的根节点开始,首先将根节点指针入队列,然后从队头取出一个元素,每取一个元素,执行下面两个操作:
1、访问该元素所指向的节点。
2、若该元素所指节点的左右孩子节点非空,则将该元素所指节点的左孩子指针和右孩子指针顺序入队。此过程不断进行,当队列为空时,二叉树的层次遍历结束。
(1)php树的遍历扩展阅读
由于遍历中所使用的数据结构是一个队列而不是栈,因此写一个按层遍历的递归程序很困难。如下程序用来对二叉树进行逐层遍历,它采用了队列数据结构。队列中的元素指向二叉树节点。当然,也可以采用公式化队列。
程序中,仅当树非空时,才进入w h i l e循环。首先访问根节点,然后把其子节点加到队列中。当队列添加操作失败时,由Add引发NoMem异常,由于没有捕获该异常,因此当异常发生时函数将退出。在把t的子节点加入队列后,要从队列中删除t元素。
㈡ 数据结构中"遍历"是什么意思
所谓遍历,是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点旅悄备所做的操作依赖于具体的应用问题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。
(2)php树的遍历扩展阅读:
树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问一次且仅访问一次。
在数据结构中三种最重要的遍历方式分别称为前序遍历、中序遍历和后序遍历。
以下是三种遍历的方法:
1、中序:若二叉树非空,则依次执行如下操作:
⑴遍历左子树;
⑵访问根结点;
⑶遍历右子树。
2、先序遍历:若二叉树非空,则依次执行如下操作:
⑴ 访问根结点;
⑵ 遍历左子树;
⑶ 遍历右子树。
3、后序遍历:若二叉树非空,则依次执行如下操作:
⑴运猛遍历左子树;
⑵遍历右子树;
⑶访问根结点。
以这3种方式遍历一棵树时,若按访问结点的先后次序将结点排列起来,就可分别拆毁得到树中所有结点的前序列表、中序列表和后序列表。相应的结点次序分别称为结点的前序、中序和后序。
㈢ 如何遍历树的所有节点
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
CallTreeView(Me.TreeView1)
EndSub
PrivateSubForTreeNode(ByValTempNodeAsTreeNode)
MessageBox.Show(TempNode.FullPath)
雀前嫌DimaNodeAsTreeNode
ForEachaNodeInTempNode.Nodes
ForTreeNode(aNode)
Next
EndSub
悔枣PrivateSubCallTreeView(ByValaTreeViewAsTreeView)
DimTempNodeAsTreeNode
ForEachTempNodeInaTreeView.Nodes
顷手ForTreeNode(TempNode)
Next
EndSub
㈣ php树型数组如何转换成列表数组
public function tree(&$list, $parent) {
//保证找到的元素都放在一个数组$tree内,应该是$tree在所有的tree函数都共享
static $tree;
//遍历该数组,找到parent值为当前传递进来的$parent_id;
foreach($list as $row) {
//判断
if($row['parent'] == $parent) {
//保存起来
$tree[] = $row;
//依据当前所找到的分类缺斗,找到其子节点,操作相同,递归完成
$this->稿扮做tree($list, $row['id']);
}
}
return $tree;
}
你把你的数组带进去,这个是在类里面实现的,如果你只是想单独用个方法,你就把键衡public以及'$this->'去掉就行了
㈤ php 一维数组怎么遍历html
php遍历数组的4种方法总结,它分分别是foreach循环、each函数、list函数、for循环,需要的朋友可以参考下
在php中可以用来遍历数组的函数有很多,如有:for语句、list、each、foreach这四个函数,这也是在php中遍历数组的几个主要的函数,下面我来给大家介绍。
foreach遍历数组
我们在运用数组时,常常要遍历数组并获得各个键或者元素值,php提供了一些专门遍历数组的函数。这里先介绍foreach遍历数组函数的用法。
结构形式:
复制代码 代码如下:
foreach ( array_expression as $value ) statement
/* array_expression是要遍历的数组
as作用是将数组的值赋给$value
statement是后续语句
*/
实例1:
复制代码 代码如下:
'白色' ,
'black' => '黑色' ,
'red' => '红色' ,
'green' => '绿色',
'yellow' => '黄色');
foreach( $color as $c) echo $c ."
";
?>
通过foreach不仅可以获得元素的值也可以获得键名,结构形式:
复制代码 代码如下:
foreach ( array_expression as $key => $value ) statement
将以上实例中第7行的代码:
复制代码 代码如下:
foreach( $color as $c) echo $c ."<br>";
改为:
复制代码 代码如下:
foreach( $color as $key => $c) echo $key.$c ."<br>";
each遍历数组
遍历数组是php数组操作一个重要的环节,除了前面提到的foreach函数,这里再介绍一个遍历数组的函数-each()。
用each()函数可以输出当前指针位置的键名和对应的元素值。可以使用”0″或”key”来访问键名(标识符),用”1″或”value”访问标识符对应的值。
实例:
复制代码 代码如下:
<?php
$languages=array(1=-->"php",
5=>"html",
10=>"css");
$a=each($languages); /* 第一次遍历数组 */
echo $a[0] ."t";
echo $a[1] ."<br>";
$a=each($languages); /* 第二次遍历数组 */
echo $a[key] ."t";
echo $a[value];
?>
list遍历数组
函数list可以在遍历数组时一次赋给变量,通常和each()函数配合使用。用list()函数使访问each()返回的键和值变得更加简单了。
实例:
复制代码 代码如下:
<?php
$date=array(1=-->"Monday",
2=>"Tuesday",
3=>"Wednesday");
list($key,$value)=each($date); /* 遍历函数 */
echo "$key $value" ."<br>"; /* 输出第一个数组 */
$next=next($date); /* 指针后移 */
echo "$next";
?>
ps:list()函数刚好与array()函数相反,array()将一系列数据构造成数组,而list()则将数组拆分成数据。
for遍历数组
除了php预定义的一些遍历数组函数,我们还可以利用for语句的循环特性将数组遍历输出。下面给出例子:
复制代码 代码如下:
<?php
$a[]="张学友"; /* 定义数组 */
$a[]="刘德华";
$a[]="黎明";
$a[]="郭富城";
$s=count($a); /* 统计数组个数 */
for($i=0;$i<$s;$i++){ /* 遍历数组 */
echo $a[$i] ."<br /-->"; /* 显示数组 */
}
?>
㈥ 什么是树的中序遍历有什么作用
中序序列。
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回,否则:
(1)中序遍历左子树
(2)访问根结点
(3)中序遍银盯历右子树
如图所示二叉树,中序遍历结果:DBEAFCG
中序遍历数学表达式形式:
当对一棵数学表达式树进行中序,前序和后序遍历时,就分别得到表达式的中缀、前缀和后缀形式。中缀(infix)形式即锋肆和平时所书写的数学表达式形式,在这种形式中,每个二元操作符(也就是有两个操作数的操作符)出现在左操作数之后,右操作数之前。在使用中缀形式时,可能会产生一些歧义。
例如,x+y ×z可以理解为(x+y) ×z或x+ (y ×z)。为了避免这种歧义,可对操作符赋于优先级并采用优先级雹腔规则来分析中缀表达式。在完全括号化的中缀表达式中,每个操作符和相应的操作数都用一对括号括起来。
更甚者把操作符的每个操作数也都用一对括号括起来。如( (x) + (y) ),( (x) + ( (y) * (z) ) )和( ( (x) + (y) ) * ( (y) + (z) ) ) * (w)。
㈦ 树有前序遍历、中序遍历、后序遍历。请问先序遍历、层次序列分别是什么
先序就是前序遍历:先根,再左子树,然销档后右子树
层肆陆次序就是:根,第二层从左到右,第三次从亏雹乱左到右...
㈧ 数据结构——树和森林的遍历方法
1、树的遍历的定义 :以某种方式访问树中的每一个结点,且仅访问一次。 树的遍历主要亮做有先根遍历和后根遍历。
2、(1)先根遍历: 若树非空,则先访问根结点,再按照从左到右的顺序遍历根结点的每一棵子树。这个访问顺序与这棵树对应的二叉树的先序遍历顺序相同。
(2)后根遍历: 若树非空,则按照从左到右的顺序遍历根结点的每一棵子树,之后再访问根结点。其访问顺序与这棵树对应的二叉树的中序遍历顺序相同。
Example one:
根据以上这幅图有如下结果:
注意到我们并拆山没有定义一般树的中根遍历,因为子结点该怎么分两部分并没有定义,所以只定旅键中义先、后根。
Example two:
1、前序遍历
前序遍历的定义为:
(1)访问森林中第一棵树的根结点;
(2)前序遍历第一棵树的根结点的子树;
(3)前序遍历去掉第一棵树后的子森林。
2、中序遍历
中序遍历的定义为:
(1)中序遍历第一棵树的根结点的子树;
(2)访问森林中第一棵树的根结点;
(3)中序遍历去掉第一棵树后的子森林。
森林与二叉树的转换
树转化为二叉树:
⑴ 加虚线(或者粗实线)。在树的每层按从“左至右”的顺序在兄弟结点之间加虚线相连。
⑵ 去连线。除最左的第一个子结点(长子节点)外,父结点与所有其它子结点的连线都去掉。
森林转换成二叉树:
当一般的树转换成二叉树后,二叉树的右子树必为空。若把森林中的第二棵树(转换成二叉树后)的根结点作为第一棵树(二叉树)的根结点的兄弟结点,则可导出森林转换成二叉树的转换步骤如下:
(1)、把每棵树转换为二叉树
(2)、按给出的森林中树的次序,第一棵树不动,从第二棵树开始,依次把后一棵树的根结点作为前一棵二叉树的根结点的右孩子,用线连起来,当所有的二叉树连接起来后,就得到了由森林转换来的二叉树。
㈨ php 如何做排列组合
原理相当于自己建个树,不停地在末尾里添加上子节点,最后遍历整个树。
代码如下:
<?php
$str='1=12,2=34,3=14,4=23';
$_str=explode(',',$str);
$_str=array_reverse($_str);
$_key=array();
$tree=array();
foreach($_str as $v){
$str=explode('=',$v);
$_key[]=$str[0];
$str=str_split($str[1]);
$_tree=array();
foreach($str as $node){
if(empty($tree)):
$_tree[][]=$node;
else:
foreach($tree as $_node) $_tree[]=str_split(implode($_node).$node);
endif;
}
$tree=$_tree;
}
foreach($tree as $v){
$str=array();
foreach($v as $_k=>$_v) $str[]=$_key[$_k].'='.$_v;
echo implode(',',array_reverse($str)),'<br>';
}
?>
㈩ 如何用循环遍历树
#include"stdio.h"
#include"stdlib.h"
typedef struct BiTNode
{ char data;
struct BiTNode *lchild,*rchild;
}*BiTree,BiTNode;
BiTree CreateBiTree(BiTree &T) {
// 按先序次序输入二叉树中结点的如迹值(一个字符),空格字符表示空树,
// 构造二叉链扮数表表示的二叉树T。
char ch;
scanf("%c",&ch);
if (ch==' ') T = NULL;
else {
T = (BiTNode*)malloc(sizeof(BiTNode));
T->data = ch; // 生成根渣缺并结点
CreateBiTree(T->lchild); // 构造左子树
CreateBiTree(T->rchild); // 构造右子树
}
return T;
} // CreateBiTree
int PreOrderTraverse( BiTree T,char(*visit)(char e) ) {
// 采用二叉链表存储结构,Visit是对数据元素操作的应用函数,
// 先序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。
if (T) {
if (visit(T->data))
if (PreOrderTraverse(T->lchild, visit))
if (PreOrderTraverse(T->rchild, visit)) return 1;
return 0;
} else return 1;
} // PreOrderTraverse
char visit ( char e )
{printf("%c", e );}
int main()
{BiTree T;
CreateBiTree(T);
PreOrderTraverse(T, visit);
return 0;
}