今天给各位分享PHP二叉树怎么寻找路径的知识,其中也会对PHP二叉树进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录:
如何找出二叉树两结点之间的路径,并嫠薪岬
使用中序遍历即可。
bool getPath(TreeNode *root, TreeNode *one, TreeNode *two)
{
int getNodes = 0;
if (root == NULL)
return false;
if (getPath(root-left, one, two))
{
//当前节点入队
if (getPath(root-right, one, two)) //如果两个节点刚好位于当前节点的左右子树则路径已经找到。
return false;
else //否则,仅仅找到了一个节点还需要继续搜索
return true;
}
else if (getPath(root-right, one, two))//仅仅找到了一个节点还需要继续搜索
{
//当前节点入队
return true;
}
return false;
}
最终获得队列则是两个节点间的路径。
求二叉树中从根结点到叶子节点的路径
b=NULL; //建立的二叉树初始时为空
ch=str[j];
while(ch!='\0'){ //str未扫描完时循环
switch(ch){
case '(':top++;St[top]=p;k=1;break; //为左结点
case ')':top--;break;
case ',':k=2;break; //为右结点
default :p=(BTNode *)malloc(sizeof(BTNode));
p-data=ch;
p-lchild=p-rchild=NULL;
if(b==NULL)
b=p; //p指向二叉树的根结点
else{
switch(k){
case 1:St[top]-lchild=p;break;
case 2:St[top]-rchild=p;break;
}
int main(){
BTNode *b;
ElemType path[MaxSize],longpath[MaxSize];
int i,longpathlen=0;
CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
printf("二叉树b:");DispBTNode(b);printf("\n\n");
printf("b的叶子结点:");DispLeaf(b);printf("\n\n");
printf("AllPath:\n");AllPath(b);printf("\n");
printf("AllPath1:\n");AllPath1(b,path,0);printf("\n");
LongPath(b,path,0,longpath,longpathlen);
printf("第一条最长路径长度:%d\n",longpathlen);
printf("第一条最长路径:");
for(i=longpathlen;i=0;i--)
printf("%c ",longpath[i]);
printf("\n");
return 0;
}
扩展资料;
遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。
设L、D、R分别表示遍历左子树、访问根结点和遍历右子树, 则对一棵二叉树的遍历有三种情况:DLR(称为先根次序遍历),LDR(称为中根次序遍历),LRD (称为后根次序遍历)。
参考资料来源:百度百科-二叉树
php 二叉树查询法请教下
function binarysearch($arr,$findval,$lelf,$right)这一行里的$lelf写错了,应该是left
关于PHP二叉树怎么寻找路径和PHP二叉树的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。