版权声明: https://blog.csdn.net/qq_41880190/article/details/84893897
二叉树的最大深度
给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的距离。
如果二叉树为空,则深度为0 如果不为空,分别求左子树的深度和右子树的深度,取最大的再加1
代码实现
int maxdepth(TreeNode* root)
{
//空树返回 0
if(root == nullptr)
return 0;
//遍历左子树
int left_depth = maxdepth(root->left);
//遍历右子树
int right_depth = maxdepth(root->right);
return left_depth > right_depth ? left_depth : right_depth + 1;
}
二叉树的最小深度
给定一个二叉树,找出其最小深度。 二叉树的最小深度为根节点到最近叶子节点的距离。
判断左子树或右子树是否为空,若左子树为空,则返回右子树的深度,反之返回左子树的深度,如果都不为空,则返回左子树和右子树深度的最小值
代码实现
int mindepth(TreeNode* root)
{
//访问根结点
if(root == nullptr)
return 0;
//左树为空,返回右树
else if(root->left == nullptr)
return mindepth(root->right) + 1;
//右树为空,返回左树
else if(root->right == nullptr)
return mindepth(root->left) + 1;
//左右子树都不为空,返回最小值
else if(root->left != nullptr && root->right != nullptr)
return min(mindepth(root->left), mindepth(root->right)) + 1;
//左右子树为空,返回 1
else
return 1;
}
二叉树的宽度
链表的公共结点
代码如下
ListNode* FindSameNode(ListNode* pHead1, ListNode* pHead2)
{
//任意一个链表为空则返回 nullptr
if(pHead1 == nullptr || pHead2 == nullptr)
return nullptr;
int len1, len2, sublen;
//计算链表 pHead1 的长度
while(pHead1 != nullptr)
{
pHead1 = pHead1->pNext;
len1++;
}
//计算链表 pHead2 的长度
while(pHead2 != nullptr)
{
pHead2 = pHead2->pNext;
len2++;
}
ListNode* pCur1 = pHead1;
ListNode* pCur2 = pHead2;
//较长的链表先走 sublen 步
if(len1 > len2)
sublen = len1 - len2;
else
sublen = len2 - len1;
while(sublen--)
{
if(len1 > len2)
pCur1 = pCur1->pNext;
else
pCur2 = pCur2->pNext;
}
//找公共结点
while(pCur1 != pCur2)
{
//若链表结点 值相等则跳出循环,并返回
if(pCur1->m_Value == pCur2->m_Value)
break;
pCur1 = pCur1->pNext;
pCur2 = pCur2->pNext;
}
return pCur1;
}