求二叉搜索树的第k个节点

来源:互联网 发布:留学中介机构 知乎 编辑:程序博客网 时间:2024/05/23 19:00

本题源自剑指offer

-----------------------------------------------------------------------------

用中序遍历二叉搜索树得到有序数列,即可得到第k个数

递归:

    TreeNode* KthNode(TreeNode* pRoot, int k)    {        if(pRoot==NULL || k==0)            return NULL;        return KthNodeCore(pRoot,k);    }    TreeNode* KthNodeCore(TreeNode* root,int& k){        TreeNode* target=NULL;        if(root->left!=NULL){            target=KthNodeCore(root->left,k);        }        if(target==NULL){            if(k==1)                target=root;            k--;        }        if(target==NULL&&root->right!=NULL){            target=KthNodeCore(root->right,k);        }        return target;    }


非递归:

   TreeNode* KthNode(TreeNode* pRoot, int k)    {        if(pRoot==NULL || k==0)            return NULL;        stack<TreeNode*> treeStack;        TreeNode* result=NULL;        int count=0;        TreeNode* p=pRoot;        while(p!=NULL || !treeStack.empty()){            while(p!=NULL){                treeStack.push(p);                p=p->left;            }            TreeNode* q=treeStack.top();            treeStack.pop();            count++;            if(count==k){                result=q;            }            p=q->right;        }        return result;    }


原创粉丝点击