获取最长单色子路径的长度
来源:互联网 发布:网络大电影发行 编辑:程序博客网 时间:2024/04/30 16:18
题目:对于一棵由黑白点组成的二叉树,我们需要找到其中最长的单色简单路径,其中简单路径的定义是从树上的某点开始沿树边走不重复的点到树上的另一点结束而形成的路径,而路径的长度就是经过的点的数量(包括起点和终点)。而这里我们所说的单色路径自然就是只经过一种颜色的点的路径。你需要找到这棵树上最长的单色路径。
#include<iostream>#include<vector>using namespace std;typedef struct BiNode //定义一棵二叉树{char val;//偶数表示白色,奇数表示黑色struct BiNode *left;struct BiNode *right;}BiNode,*BiTree;void CreateBiTree(BiTree &T)//创建一颗二叉树{char c;cin >> c;if ('#' == c)T=NULL;else{T = (BiNode*) malloc(sizeof(BiNode));T->val = c;CreateBiTree(T->left);CreateBiTree(T->right);}}int Maxlength(vector<int>& vec)//获取某一条路径中的最长单色子路径长度{if (vec.size() == 0)return 0;int length = 1, max = 1;for (size_t i = 1; i != vec.size(); ++i){if (vec[i] != vec[i - 1]){length = 1;}else{length++;if (max < length){max = length;}}}return max;}void AllPath(BiNode* root, vector<char>& VC,vector<int>& V, vector<int>& Length)//遍历整棵树的所有路径,并保存每一条路径的最长单色子路径的长度到vector中{if (root == NULL)return;VC.push_back(root->val);int a = (root->val - '0') % 2;//将字符型的数值转换成0(白)和1(黑)来表示结点的黑白属性V.push_back(a);if (root->left == NULL&&root->right == NULL){Length.push_back(Maxlength(V));for (size_t i = 0; i != V.size(); ++i){cout << VC[i] << " ";}cout << endl;}if (root->left != NULL)AllPath(root->left, VC,V, Length);if (root->right != NULL)AllPath(root->right, VC,V, Length);V.pop_back();VC.pop_back();}int GetLongestLength(vector<int>& v)//根据所有路径中的最长单色子路径长度获取这棵树的最长单色子路径{if (v.size() == 0)return 0;int max = v[0];for (size_t i = 1; i != v.size(); ++i){if (v[i]>max)max = v[i];}return max;}int main(){BiTree T;CreateBiTree(T);vector<int> V;//存储每一条路径的结点的颜色vector<int> Length;//存储每一条路径的最长单色子树长度vector<char> VC;//存储每一条路径的结点值AllPath(T, VC,V, Length);cout << "最长单色子路径的长度是:";cout<<GetLongestLength(Length) << endl;system("pause");return 0;}
实验效果如下所示:
0 0
- 获取最长单色子路径的长度
- 树上最长单色路径
- 树上最长单色路径
- 树上最长单色路径
- 树上最长单色路径
- 二叉树上最长单色路径
- 获取两个字符串之间最长公共子串的长度
- 从字符串中获取最长子串的长度
- [编程题]树上最长单色路径
- 一站通offer 树上最长单色路径
- [编程题]树上最长单色路径
- 深度优先 树上最长单色路径
- nowcoder 树上最长单色路径(最长路径,二叉树+dp)
- 求最长递增子序列的长度
- 最长公共子序列的长度
- 最长公共子串的长度
- 求最长重复子串的长度
- 求最长上升子序列的长度
- 【GDOI2016模拟赛4.22】总结
- mysql 5.6在线DDL建索引测试
- nrf51822连接微信---crc32计算
- hadoop学习序曲之java基础篇--java泛型以及集合类复习
- 产品学习梳理2-产品原型制作
- 获取最长单色子路径的长度
- 4.23GDOI模拟赛总结
- Mapped Statements collection does not contain value for
- Mac通过RVI使用Wireshark对iPhone抓包
- hadoop学习序曲之java基础篇--javamap
- 《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)前言
- js操作cookie实现记住密码功能
- java Annotation(注解)(一)
- Spring调度任务cronjob 精确指定任务的运行时间