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

二叉搜索树的第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;
}


你可能感兴趣的:(58.二叉搜索树的第k个结点)