题目描述:
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路:
此题大体思路和前面博客二叉树中和为某一值的路径基本一致,借助于栈,把访问到的数据保存在栈中,当到达某一叶子节点时,计算栈中的数据个数,并与最大值比较,求得最大值,当二叉树所有节点访问结束便能求得二叉树的深度。
struct TreeNode
{
int value;
TreeNode *left;
TreeNode *right;
}
class solution
{
public:
int GetDepth(TreeNode* root)
{
int depth=0;
int MaxNum=0
int num=0;
vector<TreeNode*> tempNode;
if(root)
{
search(TreeNode* root);
depth=MaxNum;
}
//return 0;
return depth;
}
void search(TreeNode* root)
{
tempNode.push_back(root);
/*到这里访问到叶子节点,求出栈中数据个数*/
if(!root->left&&!root->right)
{
//MaxNum=;
if((tempNode.end-tempNode.begin)>MaxNum)
MaxNum=tempNode.end-tempNode.begin;
else
MaxNum=MaxNum;
}
else
{
//num++;
if(root->left)
{
search(root->left);
}
if(root->right)
{
search(root->right);
}
}
/*如果没有数据,丢弃栈顶数据*/
tempNode.pop_back();
}
}
简约版:
class solution
{
public:
int GetDepth(TreeNode* root)
{
int depth=0;
int MaxNum=0
int num=0;
if(root)
depth=depthOfTree(root);
return depth;
}
int depthOfTree(TreeNode* tree)
{
if(tree==NULL)
return 0;
int leftNum=depthOfTree(tree->left);
int rightNum=depthOfTree(tree->right);
return (leftNum>rightNum)?leftNum+1:rightNum+1;
}
}