58.二叉搜索树的第k个结点

来源:互联网 发布:软件板块股票行情 编辑:程序博客网 时间:2024/06/06 08:48
二叉搜索树的第k个结点
  • 参与人数:1510时间限制:1秒空间限制:32768K
  •  算法知识视频讲解

题目描述

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

牛客网提示我:段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
是因为
if (pRoot == NULL || k == 0) return NULL;
我少写了 k == 0 这种情况。。。。。
// 56.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <vector>using namespace::std;struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};class Solution {private:public:TreeNode* KthNode(TreeNode* pRoot, unsigned int k) {if (pRoot == NULL || k == 0) return NULL;vector<TreeNode*> vec;travInorder(pRoot, vec);if (vec.size() < k) return NULL;return vec[k - 1];}void travInorder(TreeNode* p, vector<TreeNode*>& vec) {if (p == NULL) return;travInorder(p->left, vec);vec.push_back(p);travInorder(p->right, vec);}};int _tmain(int argc, _TCHAR* argv[]){TreeNode p5(5);TreeNode p2(2);TreeNode p3(3);TreeNode p4(4);TreeNode p6(6);TreeNode p7(7);TreeNode p8(8);p5.left = &p3;p5.right = &p7;p3.left = &p2;p3.right = &p4;p7.left = &p6;p7.right = &p8;Solution s;TreeNode* result = s.KthNode(&p5, 3);return 0;}

第二次做:
/*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, unsigned int k) {        if ( pRoot == NULL || k == 0 ) return NULL ;                vector<TreeNode*> vec ;                get( pRoot, vec ) ;                if ( vec.size() < k ) return NULL ;                return vec[k - 1] ;            }        void get( TreeNode* pNode, vector<TreeNode*>& vec ) {        if ( pNode == NULL ) return ;                get( pNode->left, vec ) ;        vec.push_back( pNode ) ;        get( pNode->right, vec ) ;    }    };

第三次做:
/*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, unsigned int k) {        if ( pRoot == NULL || k <= 0 ) return NULL ;                vector<TreeNode*> vec ;                trav_in( pRoot, vec ) ;                if ( vec.size() < k ) return NULL ;        else return vec[k - 1] ;    }    void trav_in( TreeNode* node, vector<TreeNode*>& vec ) {        if ( node == NULL ) return ;                trav_in( node->left, vec ) ;                vec.push_back( node ) ;                trav_in( node->right, vec ) ;    }    };


0 0
原创粉丝点击