题目:

求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。
描述
设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径。

输入
一行数据,为二叉树的先序序列(序列中元素为‘#’时,表示该结点为空)。
输出
第一行为二叉树的最长路径长度,第二行为此路径上从根到叶结点的各结点的值。
思路:(递归)

  1. 函数longest_path(BiTree T,int *path,int &len,int *longestpath,int &longest_len)
    //char path[] 每次循环得到的路径
    //char longestpath[]最长路径
    //int &longest_len最长路径的大小
    //int &len每次循环得到的路径的大小
  2. 代码运行时:遇到的不是叶子结点,该条路径继续
    path[len++]T->data;再递归调用该函数,这个节点的左子树,右子树;
  3. 遇到的时叶子结点时,该条路径结束,与之前的最长路径比较,更新最长路径(可能会);

求最长路径算法(核心代码)

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[j];}longest_len=len;//longest_len更新 }}else//当遇到的不是叶子结点时,该条路径继续 {path[len++]=T->data;longest_path(T->lchild ,path,len,longestpath,longest_len);longest_path(T->rchild ,path,len,longestpath,longest_len);len--;}}
}

全部可执行代码

#include<stdio.h>
#include<bits/stdc++.h>
#define MAX  200
typedef char TElemType;
typedef int status;
typedef struct BiNode
{TElemType data;struct BiNode *lchild;struct BiNode *rchild;
}BiNode,*BiTree;
void CreateBiTree(BiTree &T)//二叉树的先序创建
{TElemType ch;scanf("%c",&ch);if(ch=='#')T=NULL;else {T=(BiNode*)malloc(sizeof(BiNode));if(!T)exit(-1);T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}
}
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[j];}longest_len=len;//longest_len更新 }}else//当遇到的不是叶子结点时,该条路径继续 {path[len++]=T->data;longest_path(T->lchild ,path,len,longestpath,longest_len);longest_path(T->rchild ,path,len,longestpath,longest_len);len--;}}
}
int main()
{BiTree T;printf("创建树输入树T的先序序列(其中使用#代表空节点)\n");CreateBiTree(T);int path[MAX]={0};int longestpath[MAX]={0};int len=0;int longest_len=0;longest_path(T,path,len,longestpath,longest_len);printf("第一条最长的路径长度为:%d\n",longest_len);printf("路径为:"); for(int i=0;i<=longest_len;i++){printf("%c ->",longestpath[i]);}printf("NULL");}

数据结构——二叉树的最长路径问题相关推荐

  1. 数据结构——二叉树的递归算法

    二叉树的结构定义: typedef struct BiNode {TElemType data;struct BiNode *lchild;struct BiNode *rchild; }BiNode ...

  2. 二叉树的最长的路径长度最大路径和

    题目 给定一个二叉树,任意两个节点之间必然是有一条路径相通的,假定父节点和它的孩子节点的距离为单位1,求二叉树中相距最远的两个节点间的路径长度 分析 这是一个简单的动态规划问题,假设某个节点node, ...

  3. 3006基于二叉链表的二叉树最长路径的求解(附思路)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为 ...

  4. 变形二叉树中节点的最大距离(树的最长路径)——非递归解法

    问题描写叙述: 假设我们把二叉树看成一个图,父子节点之间的连线看成是双向的.我们姑且定义"距离"为两节点之间边的个数. 写一个程序,求一棵二叉树中相距最远的两个节点之间的距离.測试 ...

  5. 求二叉树中的第一条最长路径长度,并输出最长路径上的节点

    #include <stdio.h> #define MaxSize 1000typedef struct BiTNode {int data;struct BiTNode *lchild ...

  6. 找二叉树根节点到叶子结点最长路径

    void Findpath(BiTree T){//后序遍历法寻找从根节点到叶子结点最长路径BiTree stack[MaxSize],path[MaxSize],p=T,r;int top=-1,m ...

  7. 数据结构----二叉树

    五.二叉树 一.二叉树入门 之前我们实现的符号表中,不难看出,符号表的增删查操作,随着元素个数N的增多,其耗时也是线性增多的,时 间复杂度都是O(n),为了提高运算效率,接下来我们学习树这种数据结构. ...

  8. 数据结构 | 二叉树的一些性质及证明、树的路径长度、结点的路径长度

    一.树的介绍 1. 树的定义 树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合. 把它叫做"树"是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而 ...

  9. 求二叉树上结点的路径_剑指offer 二叉树

    二叉树的镜像(简单) 操作给定的二叉树,将其变换为源二叉树的镜像. 思路: 根节点左右节点调换位置 递归 注意判断空子树情况 二叉树的深度(简单) 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经 ...

最新文章

  1. Bootstrap中默认表单的创建
  2. python3.6.3安装-CentOS7.2安装Python3.6.3
  3. Oracle数据库之创建和管理表
  4. javaPNS进阶-高级推送技巧
  5. 数组精选题目三连(5)
  6. 大数据技术之 Kafka (第 2 章 Kafka快速入门)
  7. How AI Is Transforming Medical Imaging
  8. learn go return fuction
  9. UDP网络编程核心类
  10. Keil(MDK) 5 软件安装教程
  11. 用C语言实现“电子词典”项目
  12. php生成五星红旗,php基于GD库画五星红旗的方法_PHP
  13. 时代周报:马云借欺诈门一石三鸟 大规模公关秀
  14. GROMACS Tutorial 6-Free Energy Calculations
  15. 树莓派使用create_ap创建局域网
  16. [Java]-单例模式与volatile简介
  17. 高清视频体验大幅提升,来数数我们应用了哪些新算法
  18. 百度这样搜索,可以去掉广告!
  19. 快速识别图像的人工智能图像识别小程序分享
  20. 关于搭建yuanshen(yuan神)私人服务器教程

热门文章

  1. 使用 CefSharp 在 C# App 中嵌入 Chrome 浏览器
  2. git-ftp Can't access remote 'ft://...', exiting...问题记录
  3. ArcGIS实验教程——实验二十七:时态数据可视化----以飓风路径为例
  4. CityEngine生成不等间距桥墩
  5. Android之解决PC浏览器上传表单文件到手机服务器read数据错误导致有时候下载到手机的文件打开文字错乱问题
  6. Git之怎么通过命令修改前面几次提交的记录
  7. linux c之在终端如何依赖.o文件(静态链接库)运行C文件的命令
  8. Android之水平ProgressBar多彩背景颜色
  9. 震惊世界的亚洲8大奇迹,你都知道几个?
  10. 地球上最快的速度......