题解 | 二叉搜索树的第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;
    }
};

全部评论

相关推荐

陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
05-25 18:29
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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