基于二叉链表的二叉树最长路径的求解
设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径。
输入
多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘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;}
基于二叉链表的二叉树最长路径的求解相关推荐
- 3006基于二叉链表的二叉树最长路径的求解(附思路)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为 ...
- 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)
基于二叉链表的二叉树高度的计算 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为 ...
- 3010基于二叉链表的二叉树高度的计算
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...
- 3003基于二叉链表的二叉树左右子树的交换
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为空) ...
- 【数据结构】基于二叉链表的二叉树结点个数的统计
基于二叉链表的二叉树结点个数的统计 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数 ...
- 基于二叉链表的二叉树高度的计算
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...
- 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)
以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...
- 3004基于二叉链表的二叉树的双序遍历(附题意解释)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次 ...
- 3009基于二叉链表的二叉树结点个数的统计(附思路)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元 ...
- 3008基于二叉链表的二叉树的遍历(附可能的WA解释)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别实现二叉树的先序.中序和后序遍历. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时 ...
最新文章
- 机器学习常见的分类算法的优缺点
- API 面试四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?...
- HttpClient连接池抛出大量ConnectionPoolTimeoutException: Timeout waiting for connection异常排查...
- 何杰月c语言课程,多线程 - 何杰leo的个人空间 - OSCHINA - 中文开源技术交流社区...
- 【图文详解】JDK1.8的安装与环境变量配置(win10)
- drbd heartbeat mysql_Heartbeat+DRBD+MySQL Replication故障处理
- 【学习Android NDK开发】Type Signatures(类型签名)
- 活动安排--贪心算法C语言实现
- 编译安装时的--prefix参数的使用方法,很实用,mark一下
- Python中文手册
- java添加word书签,Jacob操作Word书签
- 中科大计算机辅助图形实验室,Prof. Ligang Liu at USTC (中科大刘利刚教授)
- Java导出Excel每列求和,POI导出excel执行自动求和
- Spring AOP 之 Introductions
- 什么第一台多媒体电子计算机诞生,第一台多媒体电计算机是哪一年诞生的
- java画胖虎_漫画家马千里闲在家里画的“胖虎下山图”火了,关键部位令人瞩目...
- Java经典面试题总结(附答案)-java经典面试题大全总结以及整理
- 山科大 6-1 sdust-Java-可实现多种排序的Book类 (20 分)(18 软件 期中考试函数1)
- strncmp函数用法是什么
- 实用Windows系统快捷键大全
热门文章
- 用友U8审批流相关开发
- linux考试试题及答案填空题,Linux认证考试试题及答案(20210511022419)
- 楼房噪音模拟测试软件,房子不隔音?4种方法让你进入“静音”模式!
- CMD恶搞命令集,假装自己是黑客
- 【ICML2019】Set Transformer:置换不变的注意力神经网络框架
- 机器人新车号牌安装_他指挥机器人给新车“穿衣” 分分钟搞定
- UE4官方文档UI学习:3.UMG 创建暂停菜单
- eplan步进电机_数控床子里电机用步进电机好还是伺服电机好?-工业支持中心-西门子中国...
- 学生表,选课表,课程表
- Unity3D用户手册翻译(与Unity3D圣典同步)—— 优化手机的实用指南 - 未来及高端设备...