《劍指offer》面試題63 二叉搜索樹的第k個結點

/*
   5
  3 7
2 4 6 8


當中序遍歷的時候,5-3-2,返回到3的時候,左側是null值,右側是4.
只要k沒有減小到1,往上回溯都會返回null .
因爲當前結點會大於其左子樹,所以儘量在左子樹找,找不到了,再往右。
code 41行的if(node==NULL  特別能體現!!!

*/


/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/

  
class Solution {
public:
    TreeNode* KthNode(TreeNode* pRoot, unsigned int k)
    {
        if(pRoot==NULL||k==0)return NULL;
        return f(pRoot,k);
              
    }

    TreeNode* f(TreeNode* pRoot, unsigned int &k)  //k前面的&符號 !!
    {
        TreeNode* node=NULL;
        if(pRoot->left!=NULL)node=f(pRoot->left,k);
        
        if(node==NULL)
        {
            if(k==1)node=pRoot;
            k--;
        }
        if(node==NULL&&pRoot->right!=NULL)  //!!
            node=f(pRoot->right,k);
        
        return node;
    }
};


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