详细代码
#include <iostream>
#include <queue>
#include <cmath>
using namespace std;
struct TreeNode {
int val;
TreeNode *left, *right;
TreeNode(int x = 0, TreeNode *l = NULL, TreeNode *r = NULL) : val(x), left(l), right(r) {}
};
int GetDepth(TreeNode *t) {
if (!t) {
return 0;
}
int ld = GetDepth(t->left);
int rd = GetDepth(t->right);
return max(ld, rd) + 1;
}
int GetWidth(TreeNode *t) {
if (!t) {
return 0;
}
queue<TreeNode *> Q;
int maxWidth = 1;
Q.push(t);
while (1) {
int len = Q.size();
if (!len) {
break;
}
while (len--) {
TreeNode *temp = Q.front();
Q.pop();
if (temp->left) {
Q.push(temp->left);
}
if (temp->right) {
Q.push(temp->right);
}
}
maxWidth = max(maxWidth, (int) Q.size());
}
return maxWidth;
}
int main() {
TreeNode t8(8);
TreeNode t9(9);
TreeNode t4(4);
TreeNode t5(5, &t8, NULL);
TreeNode t6(6, NULL, &t9);
TreeNode t7(7);
TreeNode t2(2, &t4, &t5);
TreeNode t3(3, &t6, &t7);
TreeNode t1(1, &t2, &t3);
TreeNode *T = &t1;
cout << GetDepth(T) << endl;
cout << GetWidth(T) << endl;
return 0;
}
运行结果