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
- 58.二叉搜索树的第k个结点
- 【二叉树】二叉搜索树的第k个结点
- 二叉搜索树第k个结点
- 【树14】二叉搜索树的第k个结点
- 剑指offerr--二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 《剑指offer》二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 剑指offer:二叉搜索树的第k个结点
- [剑指offer]二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第K个结点
- 二叉搜索树的第k个结点
- SSM小技巧(一)、Controller中互相调用session中存储的内容
- OC 对象作为方法的参数连续传递
- ZOJ 3228Searching the String
- MySQL入门--修改mysql提示符的两种方法
- 编程之美3:最大公约数问题
- 58.二叉搜索树的第k个结点
- HTTP请求方法
- 简谈多态及虚函数
- Nor 与Nand Flash 区别
- 动态规划(二)——错位重排
- Android md5加密工具类
- Smarty{foreach}
- 虚拟机克隆CentOS后的网卡配置
- Codeforces Round #353 (Div. 2) -- A. Infinite Sequence