如下图所示的一棵二叉树的深度、宽度及结点间距离分别为:
深度:4 宽度:4(同一层最多结点个数)
结点间距离: ⑧→⑥为8 (3×2+2=8)
⑥→⑦为3 (1×2+1=3)
注:结点间距离的定义:由结点向根方向(上行方向)时的边数×2,
与由根向叶结点方向(下行方向)时的边数之和。
输入格式
输入文件第一行为一个整数n(1≤n≤100),表示二叉树结点个数。接下来的n-1行,表示从结点x到结点y(约定根结点为1),最后一行两个整数u、v,表示求从结点u到结点v的距离。
输出格式
三个数,每个数占一行,依次表示给定二叉树的深度、宽度及结点u到结点v间距离。
输入输出样例
输入 #110 1 2 1 3 2 4 2 5 3 6 3 7 5 8 5 9 6 10 8 6输出 #1
4 4 8
#include <iostream> #define _for(i, a, b) for (int i=(a); i<=(b); i++) using namespace std; const int MAXN = 1e6 + 10; struct node { int left, right; }; node tree[MAXN];//存储结构定义 int n, ans; void dfs(int id, int deep) { if (id == 0) return ;//到达叶子节点时返回 ans = max(ans, deep);//更新答案 dfs(tree[id].left, deep+1);//向左遍历 dfs(tree[id].right, deep+1);//向右遍历 } int main() { cin >> n; _for (i, 1, n) cin >> tree[i].left >> tree[i].right;//读入+建树 dfs(1, 1);//从1号节点出发,当前深度为1 cout << ans << endl;//输出答案 return 0;//完结撒花! }
标签:结点,距离,宽度,二叉树,深度,节点,w9 From: https://www.cnblogs.com/lijunjie03/p/17397078.html