62.二叉搜索树的第k个结点

耗尽温柔 提交于 2020-02-14 23:26:05

题目

给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。

思路

  • 二叉搜索树的中序遍历是升序的,要找到第k个结点,就中序遍历到第k个结点就行了。

代码

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
    int cnt;
    TreeNode* res;
public:
    TreeNode* KthNode( TreeNode* pRoot, int k )
    {
        cnt = 0;
        res = nullptr;
        
        helper( pRoot, k );
        
        return res;
    }
    
    void helper( TreeNode* node, int& k ) {
        if ( node == nullptr ) return;
        
        helper( node->left, k );
        
        cnt += 1;
        if ( cnt == k ) {
            res = node;
            
            return;
        }
        
        helper( node->right, k );
        
        return;
    }

    
};
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!