题目:
求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。
描述
设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径。
输入
一行数据,为二叉树的先序序列(序列中元素为‘#’时,表示该结点为空)。
输出
第一行为二叉树的最长路径长度,第二行为此路径上从根到叶结点的各结点的值。
思路:(递归)
- 函数longest_path(BiTree T,int *path,int &len,int *longestpath,int &longest_len)
//char path[] 每次循环得到的路径
//char longestpath[]最长路径
//int &longest_len最长路径的大小
//int &len每次循环得到的路径的大小 - 代码运行时:遇到的不是叶子结点,该条路径继续
path[len++]T->data;再递归调用该函数,这个节点的左子树,右子树; - 遇到的时叶子结点时,该条路径结束,与之前的最长路径比较,更新最长路径(可能会);
求最长路径算法(核心代码)
void longest_path(BiTree T,int *path,int &len,int *longestpath,int &longest_len)
{
if(T!=NULL)
{
if(T->lchild==NULL&&T->rchild==NULL)//当遇到叶子结点时,该条路径完毕
{
path[len]=T->data;
if(len>longest_len)//如果长于longest_len就替换
{
for(int j=0;j<=len;j++)
{
longestpath[j]=path