[劍指offer] :二叉搜索樹中的第k小值 C++

題目:

給定一棵二叉搜索樹,請找出其中的第k小的結點。例如, (5,3,7,2,4,6,8)    中,按結點數值大小順序第三小結點的值爲4。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
//二叉具有如下性質:
// 左子樹不爲空則左子樹上的所有節點的值均小於根節點,右子樹不爲空,則右子樹上的所有節點的值均大於根節點
// 因此這道題相當於中序遍歷二叉樹
class Solution {
    
public:
    void getKNode(TreeNode *pNode, int* current, int k, int &val) {
        if(pNode == NULL || *current > k) return;
        if(pNode->left != NULL && *current < k) {
            getKNode(pNode->left, current, k, val);
        } 
        (*current)++;
        if (*current == k) {
            val = pNode->val;
            return;
        }
        if(pNode->right != NULL && *current < k) {
            getKNode(pNode->right, current, k, val);
        }
    }
    TreeNode* KthNode(TreeNode* pRoot, int k)
    {
       if(pRoot == NULL || k <= 0) return NULL;
        int val = -1;
        int current_min = 0;
        getKNode(pRoot, &current_min, k, val);
        if(current_min < k) return NULL;
        TreeNode *tmp = new TreeNode(val);
        return tmp;
        
    }
};

問題總結:寫的時候居然current忘記設計成引用或者是指針傳遞了,結果就一直返回二叉樹的根節點,還是自己不夠細心

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章