判斷二叉樹是否平衡、求二叉樹的鏡像、按行列有序矩陣中快速查找元素是否存在

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章