文章
10
粉丝
10
获赞
2
访问
4.0k
#### 我将这道题拆解为两个部分,第一部分是找到根节点到目标叶子节点的路径(dfs),第二部分由于要求叶子节点间的路由,所以就要合并一下第一部分得到的路径(我这里是直接找到了分界点下标,依次遍历),当然,这种方法虽然思想简单,但是肯定不是最优的。下面是完整代码:
#include <iostream>
#include <vector>
#include <map>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1000; // 假设节点数最大为1000
int tr[N][3]; // 存储树结构
map<int, vector<int>> paths; // 存储从根到叶子节点的路径
// DFS记录路径
void dfs(int node, vector<int> &path) {
path.push_back(node);
bool isLeaf = true;
for (int i = 0; i < 3; i++) {
if (tr[node][i] != -1) {
isLeaf = false;
dfs(tr[node][i], path);
}
}
if (isLeaf) {
paths[node] = path;
}
path.pop_back();
}
// 找到两个路径的最后一个公共节点
int findLastCommon(const vector<int> &path1, const vector<int> &path2) {
int minLength = min(path1.size(), path2.size());
int lastCommon = -1; // 用于标记最后一个公共节点的位置
for (int i = 0...
登录后发布评论
暂无评论,来抢沙发