zoukankan      html  css  js  c++  java
  • 剑指offer系列——62.二叉搜索树的第k个结点

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

        int count = 0;
    public:
        TreeNode* KthNode(TreeNode* pRoot, unsigned int k)
        {
            if(pRoot){ 
                    TreeNode *ret = KthNode(pRoot->left, k);
                    if(ret) return ret;//第k个出现在left里面
                    if(++count == k) return pRoot;
                    ret = KthNode(pRoot->right,k);
                    if(ret) return ret;
            }
            return nullptr;
        }
    

    非递归:

        TreeNode *KthNode(TreeNode *pRoot, int k) {
            if (pRoot == nullptr)
                return nullptr;
            stack<TreeNode *> s;
            s.push(pRoot);
            TreeNode *node = pRoot->left;
            while (node || !s.empty()) {
                if (node) {
                    s.push(node);
                    node = node->left;
                } else {
                    node = s.top();
                    s.pop();
                    k--;
                    if (k == 0) {
                        return node;
                    }
                    node = node->right;
                }
            }
            return nullptr;
        }
    
  • 相关阅读:
    Java中间件:淘宝网系统高性能利器(转)
    淘宝的数据库拆分(TDDL)(转)
    java web几种开发模式(转)
    C++模板【转】
    set[c++]
    C# jsonhelper
    Vector[C++]
    list[C++]
    map[C++]
    C[泊车管理系统]
  • 原文地址:https://www.cnblogs.com/xym4869/p/12374205.html
Copyright © 2011-2022 走看看