剑指offer—二叉搜索树的第k个结点

来源:互联网 发布:农村淘宝亏了好几万 编辑:程序博客网 时间:2024/04/28 12:58

华电北风吹
天津大学认知计算与应用重点实验室
日期:2015/10/8

题目描述
给定一颗二叉搜索树,请找出其中的第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:    TreeNode* KthNode(TreeNode* pRoot, unsigned int k)    {        int order=0;        TreeNode* result;        if((pRoot==NULL)||(k<=0))            return NULL;        MidOrder(pRoot,order,k,result);        if(order<k)            return NULL;        else            return result;    }    void MidOrder(TreeNode* p,int &order,int k,TreeNode* &result)    {        if(p->left!=NULL)            MidOrder(p->left,order,k,result);        order+=1;        if(order==k)        {            result=p;            return;        }        if((order<k)&&(p->right!=NULL))            MidOrder(p->right,order,k,result);    }};
0 0