题解 | 二叉搜索树的第k个节点

二叉搜索树的第k个节点

https://www.nowcoder.com/practice/57aa0bab91884a10b5136ca2c087f8ff

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
#include <iostream>
class Solution {
public:
    int KthNode(TreeNode* proot, int k) {
        if(proot == nullptr){
            return -1;
        }
        
        int count = 0;
        stack<TreeNode*> stk;
        TreeNode* root = proot;  //用root指针来跟踪当前的节点,如果直接跟踪栈的顶点,那么会重复进行左侧深入

        while(root || !stk.empty()){  //root可能没有没有右节点,直接上一层取stk;

            while(root){  //向左边深入
                stk.push(root);
                root = root->left;
            }

            root = stk.top();stk.pop();  //检测

            count++;
            if(count == k)return root->val;

            root = root->right;
        }
            
        return -1;
    }
};

全部评论

相关推荐

07-02 10:39
门头沟学院 Java
Steven267:说点真实的,都要秋招了,还没有实习,早干嘛去了,本来学历就差,现在知道急了,而且你这个简历完全可以写成一页,劣势太大了,建议转测试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务