实战:判断树
约 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 只有一个只是"必要条件",真正严谨还得检查没有环、没有节点被指两次。别只查根就下结论。
小纸条
怎么找出根节点?
登录 后可看答案