面试题63:二叉搜索树的第k个结点

来源:互联网 发布:天播网络机顶盒刷系统 编辑:程序博客网 时间:2024/06/03 16:32

题目描述:
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。


解:
二叉搜索树的一个重要性质就是它的中序遍历是排序的,因此这道题目只需要用中序遍历一棵二叉搜索树,找到第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){        stack<TreeNode*> s;        TreeNode* temp = pRoot;        while (temp || !s.empty()) {            if (temp) {            s.push(temp);            temp = temp->left;            }            else {                temp = s.top();                s.pop();                --k;                if(k == 0)                    return temp;                temp = temp->right;            }        }        return NULL;    }};
0 0