題目大意:
很簡單,只需要找出一顆二叉樹的最大深度即可,貌似沒有時間和空間的要求。
求解方法:
更簡單,只需要按照寬度優先的方法去查找即可,在這裏我用a隊列保存待擴展的節點,用b來保存a擴展出來的節點,再利用t中間變量來交換a和b,直到a列隊爲空時,結束。
注意邊界條件,root=NULL時,應該返回0.
#include <iostream>
#include <queue>
using namespace std;
//Definition for a binary tree node.
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
int maxDepth(TreeNode* root)
{
int deep=0;
queue<TreeNode*> a;
queue<TreeNode*> b;
queue<TreeNode*> t;
if (root!=NULL)
deep=deep+1;
else
return deep;
a.push(root);
while(!a.empty())
{
//當兩個隊列至少一個不爲空時,
//羅列a中的所有的子節點
//將a的子節點放在b中,
//交換a與b
while(!a.empty())
{
TreeNode* node=a.front();
if(node->left!=NULL)
b.push(node->left);
if(node->right!=NULL)
b.push(node->right);
a.pop();
}
t=a;
a=b;
b=t;
if(!a.empty())
deep=deep+1;
}
return deep;
}
};
int main()
{
cout << "只要將頭文件和solution類拷貝進去即可。!" << endl;
//測試用例,比較麻煩,不寫,上述代碼去掉結構體定義可以AC
return 0;
}