【深基16.例3】二叉树深度

#include
using namespace std;
 
const int MAXN = 1e6 + 5;
int n, tree[MAXN][2], ans;
 
void dfs(int node, int dep) {
    int x = tree[node][0], y = tree[node][1];    // 左子结点和右子结点
    if(x == 0 && y == 0) {    // 判断是否到了叶子结点
        ans = max(ans, dep);    // 将当前深度和变量ans中保存的之前的最大深度做比较
        return;    // 到达叶子结点便不再继续递归
    }
 
    dfs(x, dep + 1);    // 递归左子树
    dfs(y, dep + 1);    // 递归右子数
}
 
int main() {
    cin >> n;
    for(int i = 1; i <= n; ++i) {
        cin >> tree[i][0] >> tree[i][1];    // 输入数据并存储
    }
    dfs(1, 1);    // 从第一个结点开始,深度为1
    cout << ans << endl;
    return 0;
}

你可能感兴趣的:(算法,深度优先,c++)