LINTCODE——二叉树具有相同值的最长路径
来源:互联网 发布:minimax算法写程序 编辑:程序博客网 时间:2024/05/22 06:17
LINTCODE——二叉树具有相同值的最长路径
思路:这套题目做了挺久的,思路清楚了其实不难
首先,这道题目中的E数组(存储边数据的数组)我们需要处理一下,我用的方法是建立一个二维数组adj,adj[i]存储与i节点相连的节点编号;
其次:我们在进行深度优先搜索的时候,要用一个marked的容器,记录节点i是否被访问过,如果被访问过,直接跳过节点i,不然会进入死循环
最后:最长路径的数据处理和LINTCODE中二叉树的最大路径和处理方法一致,得到结果,成功AC
PS:由于这个花了我不少时间,所以代码部分个人觉得注释也比较详细;
class Solution {private: //N为节点数 //adj[i]存储与i相连接的节点编号 int res = 0; int N; vector<vector<int>> adj;public: /* * @param : as indicated in the description * @param : as indicated in the description * @return: Return the number of edges on the longest path with same value. */ int LongestPathWithSameValue(vector<int> &A, vector<int> &E) { // write your code here N = A.size(); adj = vector<vector<int>>(N); //输入数据处理,把边保存到adj里面 for(int i = 0; i < N-1; i++) { //构造adj addEdge(E[i*2]-1, E[i*2+1]-1); } for(int i = 0 ; i < N ; i++) { //建立一个容器marked判断节点i是否被访问过 vector<bool> marked(N, false); depth(A, marked, i); } return res; } int depth(vector<int> &A, vector<bool> &marked, int index) { int L = 0, R = 0; marked[index] = true; bool flag = true; //在与index相连接的节点里面寻找值相等并且没有被访问过的点,深度搜索 for(int j : adj[index]) { //判断节点值是否与index的值相等 if(A[j] == A[index] && marked[j] == false) { //无法得知节点j是Index的左节点还是右节点 //但是这里只求路径长度,可以假定第一个匹配到的为左,第二个为右; if(flag) { L = depth(A, marked, j)+1; flag = false; } else { R = depth(A, marked, j)+1; } } } //这个处理过程和二叉树的最大路径和类似,这里就不再多说了 res = max(res, L + R); return max(L,R); } void addEdge(int v, int w) { adj[v].push_back(w); adj[w].push_back(v); }};
阅读全文
0 0
- LINTCODE——二叉树具有相同值的最长路径
- lintcode(480)——二叉树的所有路径
- lintcode——二叉树的所有路径
- 二叉树的最长路径
- 二叉树的最长路径
- 二叉树的最长路径
- 二叉树的最长路径
- 二叉树路径-lintcode
- 带权值二叉树的路径最长值与路径
- LintCode- 二叉树的所有路径
- Lintcode 二叉树的路径和
- lintcode----二叉树的所有路径
- binaryTreePathSum 二叉树的路径和 lintcode
- lintcode,二叉树的路径和
- lintcode,二叉树的所有路径
- lintcode二叉树的所有路径
- LintCode | 376. 二叉树的路径和
- LintCode 376-二叉树的路径和
- adapter
- path-sum Java code
- 使用Vector 升级AndroidStudio 3.0 后 报错解决
- C++操作符的优先级
- java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()L
- LINTCODE——二叉树具有相同值的最长路径
- erlang链接进程之间的关系
- 把时间当作朋友——应用(笔记)
- BootStrap
- HTML5拓扑3D机房
- 由两个栈组成的队列
- CST 2016 WARN: Establishing SSL connection without server‘s identity verification is not recommended
- 六-3 检查和编辑页面和样式 检查动画
- 四种会话跟踪技术?