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

二叉搜索树的第k个节点

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

class Solution {
public:

    stack<TreeNode*> mystack;
    //思路分析:这道题要求给出第k小(第k大其实也是一个道理)的数,而且是在二叉搜索数上的。由于二叉搜索数的左小右大的特性,这道题可以转化为“先遍历二叉搜索树,将树转化为一个有序的数组,最后再找到第k个即可。”
    //写递归的时候,边界条件:自身为空。顺序:右孩子比自己大,先入栈,自己接着入栈,最后左孩子入栈。自己入栈时直接写就行,左右孩子则递归调用。
    void solve(TreeNode* proot)
    {
        if(proot==nullptr)
            return;
        solve(proot->right);
        mystack.push(proot);
        solve(proot->left);
    }

    int KthNode(TreeNode* proot, int k) {
        // write code here       
        solve(proot);
        if(proot==nullptr || k>mystack.size() || k<=0)
            return -1;
        int result=0;
        TreeNode* temp=nullptr;
        while (k>0) {
            result=mystack.top()->val;
            mystack.pop();
            k--;
        }
        return result;
    }
};

全部评论

相关推荐

09-27 14:42
已编辑
浙江大学 Java
未来未临:把浙大放大加粗就行
点赞 评论 收藏
分享
11-11 14:21
西京学院 C++
Java抽象练习生:教育背景放最前面,不要耍小聪明
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务