给定一颗二叉搜索树,请找出其中的第k小的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdafx.h"
#include<iostream>
#include<vector>
#include<algorithm>
#include<numeric>
#include<list>
#include<iterator>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
struct TreeNode {
	char 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)
	{
		getData(pRoot);
		if (k <= 0) return NULL;
		if (k > qu.size()) return NULL;
		for (int i = 1; i < k; i++)
		{
			qu.pop();
		}
		return qu.front();
	}
	queue<TreeNode*> qu;
	void getData(TreeNode* T)
	{
		if (T == NULL) return;
		else
		{
			getData(T->left);
			qu.push(T);
			getData(T->right);
		}
	}
	//序列化二叉树,前序创建二叉树
	int p = -1;
	TreeNode* Deserialize(char *str) {
		if (*str == NULL) return NULL; //str为空
		TreeNode *T = NULL;
		++p;
		if (p >= strlen(str)) return NULL; //超出str的范围
		if (str[p] == '#') return NULL; //str的值等于#
		T = new TreeNode(str[p]);
		T->left = Deserialize(str);
		T->right = Deserialize(str);
		return T;
	}
	void preOrder(TreeNode *T)
	{
		if (T == NULL) return;
		else
		{
			cout << T->val << "  ";
			preOrder(T->left);
			preOrder(T->right);
		}
	}
};
int main()
{
	//int num = 5;
	//char *ch = new char[num];
	//cout << "strlen(ch):" << strlen(ch)<<endl;
	//cout << endl;
	Solution so;
	TreeNode *T;
	int num = 5;
	char *str = "532##4##76##8##";
	T = so.Deserialize(str);
	cout << "创建二叉树成功!"<<endl;
	cout << "前序遍历二叉树:" << endl;
	so.preOrder(T);
	cout << endl;
	TreeNode *re = so.KthNode(T,8);
	cout << "result:" << re->val << endl;
	//so.getData(T);
	//cout << "qu 队列中的值:" << endl;
	//so.print();
	//cout << endl;
	return 0;
}给定一颗二叉搜索树,请找出其中的第k小的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。的更多相关文章
- 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
		/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x ... 
- 小白专场-是否同一颗二叉搜索树-c语言实现
		目录 一.题意理解 二.求解思路 三.搜索树表示 程序框架搭建 3.1 如何建搜索树 3.2 如何判别 3.3 清空树 更新.更全的<数据结构与算法>的更新网站,更有python.go.人 ... 
- 小白专场-是否同一颗二叉搜索树-python语言实现
		目录 一.二叉搜索树的相同判断 二.问题引入 三.举例分析 四.方法探讨 4.1 中序遍历 4.2 层序遍历 4.3 先序遍历 4.4 后序遍历 五.总结 六.代码实现 一.二叉搜索树的相同判断 二叉 ... 
- HDU 3791 二叉搜索树 (数据结构与算法实验题 10.2 小明)  BST
		传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3791 中文题不说题意. 建立完二叉搜索树后进行前序遍历或者后序遍历判断是否一样就可以了. 跟这次的作业第 ... 
- leetcode-第10周双周赛-5080-查找两颗二叉搜索树之和
		题目描述: 自己的提交: class Solution: def twoSumBSTs(self, root1: TreeNode, root2: TreeNode, target: int) -&g ... 
- Convert Sorted Array to Binary Search Tree(将一个有序数组转换成一颗二叉搜索树)
		Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Fo ... 
- 二叉搜索树的第k个结点
		给定一颗二叉搜索树,请找出其中的第k小的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. /* public class TreeNode { ... 
- 二叉搜索树的第 k 个结点
		题目 给定一颗二叉搜索树,请找出其中的第k小的结点,即将二叉树中所有元素从小到大排序的第 k 个结点. 解析 按中序遍历二叉搜索树就可以获得一个非递减的序列,此时第 k 个就为答案.实际上我们只需要按 ... 
- C++版 - 剑指offer 面试题63:二叉搜索树的第k个结点(二叉树中序遍历的应用) 题解
		面试题 63:二叉搜索树的第k个结点 题目:给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 (见下面的图1) 中,按结点数值大小顺序第三个结点的值 ... 
随机推荐
- 桌面虚拟化之部署DDC-5.6
			1. 打开管理软件 2. 选择桌面部署 3. 如果没有数据库则使用默认的 4. 导入许可证文件(当然未申请可试用30天) 5. 主机类型选择无(这里未做服务器虚拟化) 6. 最后完成初步配置 配置计算 ... 
- 20101102--SQL字符串函数 ,日期和时间函数
			--------------------字符串函数------------------------- --ASCII 返回字符串的首字母的ASCII编码 select ASCII('w') selec ... 
- 《asp.net mvc实战》笔记
			对于大部分复杂的项目来说,可能不会在Models文件夹中放置你的模型.一般来说,最好的方法是将你的领域模型放在独立的项目中.这样其他应用程序可以在使用该项目而不必依赖于你的MVC应用程序.我们建议你只 ... 
- 分享web前端七款HTML5 Loading动画特效集锦
			以前我们大部分的Loading动画都是利用gif图片实现的,这种图片实现Loading动画的方法虽然也很不错,但是作为HTML5开发者来说,如果能利用HTML5和CSS3实现这些超酷的Loading动 ... 
- path 环境变量
			path(环境变量)是dos以前的内部命令,windows继续沿用至今.用作运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中去查找.一般设定java的时候为了在任何目录下都可以运行 ... 
- 杭电ACM2076--夹角有多大(题目已修改,注意读题)
			杭电ACM2076--夹角有多大(题目已修改,注意读题) http://acm.hdu.edu.cn/showproblem.php?pid=2076 思路很简单.直接贴代码.过程分析有点耗时间. / ... 
- 采用Service实现本地推送通知
			在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. ... 
- js 求前n项的 fibnaci 数列和
			function f(n) { var num1 = 1, num2 = 1; if (n == 1) document.write(num1);//n=1,输出1 else if (n > 1 ... 
- Git的学习总结和使用时遇到的问题。
			git 是一款非常强大的版本控制工具,现在市场占有率应该是一家独大了,以前用svn的童鞋估计都转投git阵营了吧 加上很多公司也用git管理自己的项目,所以 ... 
- wap网站seo如何优化呢?
			从事互联网的人员都知道移动互联网营销是一个大的趋势,但是要怎么去做恐怕还都一筹莫展.由PC端的网络营销的经验和常识来看,首要的是要做好移动端手机网站的优化工作.据观察分析,目前国内的大多数并没有做好手 ... 
