牛客劍指offer(二)

4.重建二叉樹

解題思路:先根據前序遍歷的第一個元素就是二叉樹的根節點,再根據中序遍歷根節點的左邊就是二叉樹的左子樹的結點,根節點的右邊就是二叉樹的右邊可以將一棵樹劃分成兩顆子樹,重複這個步驟,直到它的左右子樹都爲空爲止。

class Solution {
public:
    TreeNode* reCreateTree(vector<int> pre,vector<int> vin,int preL,int preR,int vinL,int vinR)
    {
        //用preL,preR來記錄前序遍歷數組的範圍
        //用vinL,vinR來記錄中序遍歷數組的範圍
        //設置遞歸結束條件
        if(preL > preR || vinL > vinR) return NULL;
        //先序遍歷的開頭就相當於是子樹的根節點
        TreeNode* root = new TreeNode(pre[preL]);
        //在中序遍歷當中遍歷,找到該節點的位置,可以劃分新的兩顆子樹
        //preL+1~preL+i爲前序遍歷中的新的左子樹,vinL~i-1爲中序遍歷中的新的左子樹
        //preL+i+1-vinL~preR前先序遍歷中的新的右子樹,i+1~vinR爲中序遍歷中的新的右子樹
        for(int i=vinL; i<=vinR; i++)
        {
            if(vin[i] == pre[preL])
            {
                root->left = reCreateTree(pre,vin,preL+1,preL+i,vinL,i-1);
                root->right = reCreateTree(pre,vin,preL+i+1-vinL,preR,i+1,vinR);
                break;
            }
        }
        return root;
    }
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
        int preL = 0,preR = pre.size()-1,vinL = 0,vinR = pre.size()-1;
        return reCreateTree(pre,vin,preL,preR,vinL,vinR);
    }
};

5.用兩個棧實現隊列

解題思路:太簡單了~~。入隊就跟入棧一樣,出隊如果棧2不爲空則直接出棧2,如果棧2爲空則將棧1壓入棧2在出棧。如果兩個棧都爲空則出隊失敗。

class Solution
{
public:
    void push(int node) {
        stack1.push(node);
    }

    int pop() {
        int a;
        if(stack2.empty())
        {
            while(!stack1.empty())
            {
                stack2.push(stack1.top());
                stack1.pop();
            }
        }
        a = stack2.top();
        stack2.pop();
        return a;
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};

6.旋轉數組中最小的數

解題思路:說實話題目都沒看明白,只知道要找最小的數,沒想到從頭到尾遍歷一遍居然給過了。。。

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        if(rotateArray.size() == 0) return 0;
        int min  = rotateArray[0];
        for(int i=1; i<rotateArray.size(); i++)
        {
            if(min > rotateArray[i]) min = rotateArray[i];
        }
        return min;
    }
};
發佈了45 篇原創文章 · 獲贊 44 · 訪問量 3442
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章