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

二叉搜索树的第k个节点

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

class Solution {
public:
    int KthNode(TreeNode* proot, int k) {
        if(!proot) return -1;
        stack<TreeNode*>sta;
        sta.push(proot);
        TreeNode *leftNode = proot;
        int cot = 0;
        while(!sta.empty()){
            while(leftNode->left != nullptr){
                sta.push(leftNode->left);
                leftNode = leftNode->left;
            }
            cot ++;
            TreeNode *temp_node = sta.top();
            sta.pop();
            if(cot == k ) return temp_node->val;
            if(temp_node->right){
                sta.push(temp_node->right);
                leftNode = temp_node->right;
            }
             
        }
        return -1;
    }
};

模拟一下递归,原理算是BFS递归版

  1. 先把所有的左孩子加入到栈中(和递归差不多,递归也是先一条路走到底),此时栈顶元素为树中左孩子最底下那一个(位置为底部的左边)
  2. 弹出栈顶,加入弹出栈顶的兄弟节点,此时需要判断右节点是否存在,对弹出栈顶进行计数

插个眼,C++ 版,不得不说,牛客的markdown好像有点小问题

全部评论

相关推荐

争当牛马还争不上
码农索隆:1.把简历改哈 2.猛投,狠投 3.把基础打牢 这样你在有机会的时候,才能抓住
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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