剑指offer | 训练题61:二叉树搜索的第K个结点

来源:互联网 发布:linux怎么用vi创建文件 编辑:程序博客网 时间:2024/05/21 09:08

题目描述

给定一颗二叉搜索树,请找出其中的第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:    int cnt = 0;    TreeNode* KthNode(TreeNode* pRoot, int k)    {        if(pRoot == NULL) return NULL;        TreeNode* tre;        tre = KthNode(pRoot->left, k);        if(tre != NULL) return tre;        cnt++;        if(cnt == k) return pRoot;        tre = KthNode(pRoot->right, k);        if(tre != NULL) return tre;        else return NULL;    }};
阅读全文
0 0
原创粉丝点击