假设二叉树b采用二叉链存储结构存储,试设计一个算法,输出该二叉树中从根节点出发的第一条最长的路径长度,并输出此路径上各节点的值。并分析算法的时间复杂度和空间复杂度。
算法中用形参maxpath[]数组存放最长路径,maxpathlen存放最长路径长度。
typedef struct BTNode {
int data;
struct BTNode* lchild;
struct BTNode* rchild;
}BTNode;
void MaxPath1(BTNode* b, int path[], int pathlen,
int maxpath[], int& maxpathlen)
{ //pathlen和maxpathlen的初值均为0
int i;
if (b == NULL)
{
if (pathlen > maxpathlen) //通过比较求最长路径
{
for (i = pathlen - 1; i >= 0; i--)
maxpath[i] = path[i];
maxpathlen = pathlen;
}
}
else
{
path[pathlen] = b->data; //将当前节点放入路径中
pathlen++; //路径长度增1
MaxPath1(b->lchild, path, pathlen, maxpath, maxpathlen);
//递归扫描左子树
MaxPath1(b->rchild, path, pathlen, maxpath, maxpathlen);
//递归扫描右子树
}
}
本算法的时间复杂度为O(n),空间复杂度为O(n)。