一般我们去二叉树的深度,但是我们实际上是求得高度,高度:是从下向上数;深度:是从上向下数。
二叉树高度:
int BinaryTreeAltitude(TreeNode * root)
{
if(root==NULL)
{
return 0;
}
int leftAltitude = BinaryTreeAltitude(root->left);
int rightAltitude = BinaryTreeAltitude(root->right);
return max(leftAltitude,rightAltitude)+1
}
二叉树深度:
int result = 0;
int BinaryTreeDepth(TreeNode * Node,int depth)
{
result = result<depth?depth:result;
if(Node->left == NULL&&Node->right == NULL)
{
return 0;
}
if(Node->left)
{
BinaryTreeDepth(Node->left,depth++);
}
if(Node->right)
{
BinaryTreeDepth(Node->right,depth++);
}
return Node;
}
当然二叉树到叶子节点的最小深度有所不同,需要考虑左右子树为空的情况:
int BinaryTreeAltitude(TreeNode * root)
{
if(root==NULL)
{
return 0;
}
int leftAltitude = BinaryTreeAltitude(root->left);
int rightAltitude = BinaryTreeAltitude(root->right);
if(leftAltitude==0)
{
return rightAltitude++;
}
if(rightAltitude==0)
{
return leftAltitude++;
}
return min(leftAltitude,rightAltitude)+1
}