61、二叉搜索树的第k个结点

来源:互联网 发布:dcs编程软件 编辑:程序博客网 时间:2024/06/06 21:39

题目描述:给定一颗二叉搜索树,请找出其中的第k大的结点。

例子:
这里写图片描述

思路:方法其实很容易想到,用到中序遍历的思想,但是代码在递归实现的过程中还是比较巧妙的。

代码:

/*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, int k)    {        if(pRoot==NULL || k==0)            return NULL;        return KthNodeCore(pRoot,k);    }    TreeNode* KthNodeCore(TreeNode* pRoot, int &k){        TreeNode* target = NULL;        if(pRoot->left!=NULL)//左,一直找到最左边的节点            target = KthNodeCore(pRoot->left,k);        if(target==NULL){//中            if(k==1)//递归终止条件                target = pRoot;            k--;        }        if(target==NULL && pRoot->right!=NULL)//右            target = KthNodeCore(pRoot->right,k);        return target;    }};

程序分析:以上图的例子为例, if(target==NULL)这一判断条件在这个例子中一共进了3次,分别如下图:
这里写图片描述