剣指offer-JZ 38-二叉樹の深さ
1174 ワード
タイトルの説明
ツリーの深さを求めるツリーを入力します.ルートノードからリーフノードまで順次通過するノード(ルート、リーフノードを含む)は、ツリーのパスを形成し、最長パスの長さはツリーの深さである.
C++
1.DFS:ノード数の計算
2.再帰:現在のノードが空の場合は0を返し、そうでない場合は左右のサブツリーの深さが最大のプラス1を返します.
ツリーの深さを求めるツリーを入力します.ルートノードからリーフノードまで順次通過するノード(ルート、リーフノードを含む)は、ツリーのパスを形成し、最長パスの長さはツリーの深さである.
C++
1.DFS:ノード数の計算
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
int deep = 0;
vector t;
int TreeDepth(TreeNode* pRoot)
{
Helper(pRoot);
return deep;
}
void Helper(TreeNode* pRoot){
if(pRoot == NULL){
int n = t.size();
deep = max(deep, n);
return;
}
t.push_back(pRoot->val);
Helper(pRoot->left);
Helper(pRoot->right);
t.pop_back();
}
};
2.再帰:現在のノードが空の場合は0を返し、そうでない場合は左右のサブツリーの深さが最大のプラス1を返します.
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
if(pRoot == 0)
return 0;
return max(TreeDepth(pRoot->left),TreeDepth(pRoot->right))+1;
}
};