其实就是牛客网中《剑指offer》栏常见的树的实现方式,
看着比类写的简单,记录一下,没有太大价值。
顺带记录一下“二叉树的第k个结点”解题代码(中序递归遍历嘻嘻)。
题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
//test
#include<iostream>
#include<vector>
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
int find(TreeNode* pRoot,int k,vector<TreeNode*>& v) {
if(pRoot==NULL) {
return 0;
}
find(pRoot->left,k,v);
v.push_back(pRoot);
if(v.size()==k) {
return 0;
}
find(pRoot->right,k,v);
return 0;
}
TreeNode* KthNode(TreeNode* pRoot, int k) {
if((k<=0)||(pRoot==NULL)) { //这句很重要~
return NULL;
}
vector<TreeNode*> v;
find(pRoot,k,v);
if(v.size()<k) {
return NU