数据结构(C语言版) 树和二叉树 算法设计Demo7
Posted Aiden (winner)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(C语言版) 树和二叉树 算法设计Demo7相关的知识,希望对你有一定的参考价值。
求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。
[题目分析]
因为后序遍历栈中保留当前结点的祖先的信息,用一变量保存栈的最高栈顶指针,每当退栈时,栈顶指针高于保存最高栈顶指针的值时,则将该栈倒入辅助栈中,辅助栈始终保存最长路径长度上的结点,直至后序遍历完毕,则辅助栈中内容即为所求。
[算法描述]
void LongestPath(BiTree bt)//求二叉树中的第一条最长路径长度
BiTree p=bt,l[],s[];
//l, s是栈,元素是二叉树结点指针,l中保留当前最长路径中的结点
int i,top=0,tag[],longest=0;
while(p || top>0)
while(p)
s[++top]=p;
tag[top]=0;
p=p->Lc;
//沿左分枝向下
if(tag[top]==1) //当前结点的右分枝已遍历
if(!s[top]->Lc && !s[top]->Rc) //只有到叶子结点时,才查看路径长度
if(top>longest)
for(i=1;i<=top;i++)
l[i]=s[i];
longest=top;
top--;
//保留当前最长路径到l栈,记住最高栈顶指针,退栈
else if(top>0)
tag[top]=1;
p=s[top].Rc;
//沿右子分枝向下
//while(p!=null||top>0)
//结束LongestPath
以上是关于数据结构(C语言版) 树和二叉树 算法设计Demo7的主要内容,如果未能解决你的问题,请参考以下文章