二叉树高度与宽度

来源:互联网 发布:java集合类图解 编辑:程序博客网 时间:2024/05/17 23:21

C++

#include <iostream>#include <queue>#define MAXN 16using namespace std;int n;  // 结点数int tree[MAXN][2];  // 树void input() {    cin >> n;    int i;    for (i = 1; i <= n; i++) {        cin >> tree[i][0];        cin >> tree[i][1];    }}int max(int a, int b) {    return a > b ? a : b;}int maxHeight(int id) {    // 子树高度    int hl = tree[id][0] != 0 ? maxHeight(tree[id][0]) : 0;    int hr = tree[id][1] != 0 ? maxHeight(tree[id][1]) : 0;    // 本结点高度    int h = max(hl, hr) + 1;    return h;}int maxWidth(int id) {    int WLastLevel = 0; // 以传入为树根,上一层不存在,宽度为0    int maxW = 1;   // 若只有树根,宽度为1    queue<int> q;   // 用以广搜的队列    q.push(id);    // bfs    while (!q.empty()) {        // 由上一层结点得出这一层结点后,队列长度即这层宽度        while (WLastLevel != 0) {            int root = q.front();            q.pop();            if (tree[root][0] != 0) { q.push(tree[root][0]); }            if (tree[root][1] != 0) { q.push(tree[root][1]); }            WLastLevel--;        }        // 记录最大值,准备处理下一层        WLastLevel = q.size();        maxW = max(maxW, WLastLevel);    }    return maxW;}int main() {    input();    cout << maxWidth(1) << " " << maxHeight(1);    return 0;}
0 0
原创粉丝点击