文章

10

粉丝

10

获赞

2

访问

4.0k

头像
三叉树 题解(小白易懂版):
P1492 北京航空航天大学2019年机试题
发布于2024年8月1日 21:52
阅读数 378

#### 我将这道题拆解为两个部分,第一部分是找到根节点到目标叶子节点的路径(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...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发