判断二叉树是否平衡、求二叉树的镜像、按行列有序矩阵中快速查找元素是否存在

1.判断二叉树是否平衡

//实现思路:从下往上进行判断, 左右子树高度差不超过2 ,但是返回结果是bool 类型, 并且要保存树的高度,因此需要增加一个额外参数

bool isBalance(BNode* pHead, int& height)
{
    if (!pHead)
        return true;

    int left = 0, right = 0;
    if (!isBalance(pHead->pLeft, left))return false;
    if (!isBalance(pHead->pRight, right))return false;

    if (abs(left - right) > 1)
    {
        return false;
    }

    height = max(left, right) + 1;
    return true;
}

2.二叉树的镜像

//求一颗二叉树的镜像
//实现思路:也就是返回一颗镜像树,树的左是镜像树的右,同理,右子树。
//遍历 时,连接镜像树,传参加入它的根节点

void CreateMirror(BNode* pHead, BNode*& pMir)
{
    if (pHead == NULL)return;
    pMir = new BNode(pHead->data);
    CreateMirror(pHead->pLeft,pMir->pRight);
    CreateMirror(pHead->pRight, pMir->pLeft);
}

3.一个m*n的矩阵,从左到右从上到下都是递增的,给一个数x,判断x是否在矩阵中。要求效率尽可能的高

//思路:有序,效率要求尽可能高,二分查找,二维数组
//划分法不断将区间缩小一行或者一列
//从第一行的最后一个元素进行查找,如果大于该元素,j++,如果小于i++ (i行号, j列号)

bool FindInMatrix(int* matrix,int m,int n ,int num)
{
    size_t i = 0, j = n-1;

    while (j>=0&&i<m)
    {
        if (num == matrix[i*n + j])
        {
            return true;
        }
        else if (num < matrix[i*n + j])
        {
            j--;
        }
        else
        {
            i++;
        }
    }

    return false;
}
    原文作者:二叉查找树
    原文地址: https://blog.csdn.net/lizhidefengzi/article/details/76037513
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞