zoukankan      html  css  js  c++  java
  • 【剑指Offer-知识迁移能力】面试题54:二叉搜索树的第k大节点

    题目描述

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

    思路

    这个题考了二叉搜索树的一个性质:二叉搜索树的中序遍历序列是递增的。所以我们中序遍历一遍二叉排序树并记录下来,然后输出第k小的节点即可。代码如下:

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    class Solution {
    public:
        TreeNode* KthNode(TreeNode* pRoot, int k)
        {
            if(pRoot==nullptr || k<=0)
                return nullptr;
            
            vector<TreeNode*> v;
            inOrder(pRoot, v);
            
            if(k<=v.size())
                return v[k-1];
            else return nullptr;
        }
        
        void inOrder(TreeNode* pRoot, vector<TreeNode*>& v)
        {
            if(pRoot!=nullptr)
            {
                inOrder(pRoot->left, v);
                v.push_back(pRoot);
                inOrder(pRoot->right, v);
            }
        }
        
    };
    
  • 相关阅读:
    C#重载操作符的那点事
    Winform最小化托盘
    C#多线程传参
    GridView事件大全
    测试2
    测试
    FindFileByContent
    JavaScriptCallCSharp js调用C#属性与方法
    GroupBy
    查询指定属性的文件
  • 原文地址:https://www.cnblogs.com/flix/p/12519850.html
Copyright © 2011-2022 走看看