实战:判断树

10 分钟

判断一堆节点是不是一棵合法的二叉树,要看两件事:有且只有一个根(没有任何人指向它),而且不能有环。一个简单办法是数每个节点"被指过几次":入度为 0 的应当只有一个,那就是根;如果没有入度 0 的点,多半成了环。

#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n = 3;                       // 节点 0 1 2
    // 0 的孩子是 1 和 2
    vector<int> indeg(n, 0);
    indeg[1]++; indeg[2]++;          // 1、2 各被指一次
    int roots = 0;
    for (int i = 0; i < n; i++) if (indeg[i] == 0) roots++;
    cout << (roots == 1 ? "可能是合法树" : "不合法");
}

提醒:入度为 0 只有一个只是"必要条件",真正严谨还得检查没有环、没有节点被指两次。别只查根就下结论。

小纸条

怎么找出根节点?

登录 后可看答案