数据结构(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的主要内容,如果未能解决你的问题,请参考以下文章

数据结构(C语言版) 树和二叉树 算法设计Demo3

数据结构(C语言版) 树和二叉树 算法设计Demo6

数据结构(C语言版) 树和二叉树 算法设计Demo4

数据结构(C语言版) 树和二叉树 算法设计Demo2

数据结构(C语言版) 树和二叉树 算法设计Demo7

数据结构C语言版 —— 树和二叉树的概念