描述

设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径。

输入

多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。

输出

每组数据输出一行,第一行为二叉树的最长路径长度,第二行为此路径上从根到叶结点的各结点的值。

输入样例 1

abcd00e00f00ig00h00
abd00e00cf00g00
0

输出样例 1

4
abcd
3
abd
//基于二叉链表的二叉树的最长路径的求解
//思路1 借助栈来实现 在后续遍历栈中可以保存当前结点的祖先信息 设一变量longest保存栈的最高栈顶指针
//每当退栈时 栈顶指针高于longest的值时 则将该栈存入辅助栈中 辅助栈始终保存最长路径长度的结点
//直至后续遍历完毕
//思路2 深度优先搜索 #include<iostream>
#define MAXSIZE 100
using namespace std;
typedef struct BiTNode{char data;                         //结点数据域 struct BiTNode *lchild,*rchild;   //左右孩子指针
}BiTNode,*BiTree;
BiTree temp;
int length=0,maxl=0;
void CreatBiTree(BiTree &T){  //按先序次序输入二叉树中结点的值 创建二叉链表表示的二叉树 char ch;cin>>ch;if(ch=='0') T=NULL;         //递归结束 空树 else{                         //递归创建二叉树 T = new BiTNode;          //生成根节点T->data = ch;             //根结点数据域置ch CreatBiTree(T->lchild);   //递归创建左子树 CreatBiTree(T->rchild);   //递归创建右子树 }
}
void CreatBiTree(BiTree &T,char ch){  //按先序次序输入二叉树中结点的值 创建二叉链表表示的二叉树 if(ch=='0') T = NULL;         //递归结束 空树 else{                         //递归创建二叉树 T = new BiTNode;          //生成根节点T->data = ch;             //根结点数据域置ch CreatBiTree(T->lchild);   //递归创建左子树 CreatBiTree(T->rchild);   //递归创建右子树 }
}
int Traverse(BiTree T){if(T!=NULL){    length++;if(length>maxl){ maxl=length; temp=T;} //保存的是根节点 Traverse(T->lchild);Traverse(T->rchild);length--;    }
}void LongestPath(BiTree T,char path[],int pathl){if(T!=NULL){if(T->lchild==NULL&&T->rchild==NULL&&T==temp){for(int i=0;i<=pathl-1;i++)cout<<path[i];cout<<T->data<<endl;}else{path[pathl] = T->data;pathl++;LongestPath(T->lchild,path,pathl);LongestPath(T->rchild,path,pathl);pathl--;} }
}int main()
{   char ch; char path[100];int pathl = 0;while(cin>>ch&&ch!='0'){BiTree T1;CreatBiTree(T1,ch);Traverse(T1);                                                                                  cout<<maxl<<endl;LongestPath(T1,path,pathl);maxl = 0,maxl=0;}return 0;} 

基于二叉链表的二叉树最长路径的求解相关推荐

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

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

  2. 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)

    基于二叉链表的二叉树高度的计算 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为 ...

  3. 3010基于二叉链表的二叉树高度的计算

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...

  4. 3003基于二叉链表的二叉树左右子树的交换

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为空) ...

  5. 【数据结构】基于二叉链表的二叉树结点个数的统计

    基于二叉链表的二叉树结点个数的统计 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数 ...

  6. 基于二叉链表的二叉树高度的计算

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...

  7. 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)

    以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...

  8. 3004基于二叉链表的二叉树的双序遍历(附题意解释)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次 ...

  9. 3009基于二叉链表的二叉树结点个数的统计(附思路)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元 ...

  10. 3008基于二叉链表的二叉树的遍历(附可能的WA解释)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别实现二叉树的先序.中序和后序遍历. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时 ...

最新文章

  1. 机器学习常见的分类算法的优缺点
  2. API 面试四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?...
  3. HttpClient连接池抛出大量ConnectionPoolTimeoutException: Timeout waiting for connection异常排查...
  4. 何杰月c语言课程,多线程 - 何杰leo的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. 【图文详解】JDK1.8的安装与环境变量配置(win10)
  6. drbd heartbeat mysql_Heartbeat+DRBD+MySQL Replication故障处理
  7. 【学习Android NDK开发】Type Signatures(类型签名)
  8. 活动安排--贪心算法C语言实现
  9. 编译安装时的--prefix参数的使用方法,很实用,mark一下
  10. Python中文手册
  11. java添加word书签,Jacob操作Word书签
  12. 中科大计算机辅助图形实验室,Prof. Ligang Liu at USTC (中科大刘利刚教授)
  13. Java导出Excel每列求和,POI导出excel执行自动求和
  14. Spring AOP 之 Introductions
  15. 什么第一台多媒体电子计算机诞生,第一台多媒体电计算机是哪一年诞生的
  16. java画胖虎_漫画家马千里闲在家里画的“胖虎下山图”火了,关键部位令人瞩目...
  17. Java经典面试题总结(附答案)-java经典面试题大全总结以及整理
  18. 山科大 6-1 sdust-Java-可实现多种排序的Book类 (20 分)(18 软件 期中考试函数1)
  19. strncmp函数用法是什么
  20. 实用Windows系统快捷键大全

热门文章

  1. 用友U8审批流相关开发
  2. linux考试试题及答案填空题,Linux认证考试试题及答案(20210511022419)
  3. 楼房噪音模拟测试软件,房子不隔音?4种方法让你进入“静音”模式!
  4. CMD恶搞命令集,假装自己是黑客
  5. 【ICML2019】Set Transformer:置换不变的注意力神经网络框架
  6. 机器人新车号牌安装_他指挥机器人给新车“穿衣” 分分钟搞定
  7. UE4官方文档UI学习:3.UMG 创建暂停菜单
  8. eplan步进电机_数控床子里电机用步进电机好还是伺服电机好?-工业支持中心-西门子中国...
  9. 学生表,选课表,课程表
  10. Unity3D用户手册翻译(与Unity3D圣典同步)—— 优化手机的实用指南 - 未来及高端设备...