Q63:二叉搜索树的第K个结点

原创 2016年08月29日 17:41:30
import BinaryTree.BinaryTreeNode;
public class Q63二叉搜索树的第K个结点 {
	/**
	 * 题目:二叉搜索树的第K个结点
	 * 题目说明:给定一棵二叉搜索树,请找出其中的第K个大的结点。
	 * 解题思路:由于是二叉搜索树,因此中序遍历二叉树时,产生的序列是按照递增顺序排好序的,因此只需要找到第K个结点并访问就可以了。
	 */
	public static void main(String[] args) {
		BinaryTreeNode root = new BinaryTreeNode();
		BinaryTreeNode node1 = new BinaryTreeNode();
		BinaryTreeNode node2 = new BinaryTreeNode();
		BinaryTreeNode node3 = new BinaryTreeNode();
		BinaryTreeNode node4 = new BinaryTreeNode();
		BinaryTreeNode node5 = new BinaryTreeNode();
		root.leftNode = node1;
		root.rightNode = node2;		
		node1.leftNode = node3;
		node2.leftNode  = node4;		
		node2.rightNode = node5;
		root.value = 1;
		node1.value = 2;
		node2.value = 3;
		node3.value = 4;
		node4.value = 5;
		node5.value = 6;
		Q63二叉搜索树的第K个结点  test = new Q63二叉搜索树的第K个结点();
		System.out.println(test.findKthNode(root, 3).value);
	}
	public BinaryTreeNode findKthNode(BinaryTreeNode root, int k){
		if(root == null || k <= 0){
			return null;
		}
		return findNode(root, k);
	}
	private BinaryTreeNode findNode(BinaryTreeNode root, int k){
		BinaryTreeNode aimNode = null;//用来返回第K个结点
		
		if(root.leftNode != null){//要中序遍历,必须从最左子结点开始遍历,此时K不变
			aimNode = findNode(root.leftNode, k);
		}
		if(aimNode == null){//最左子结点为空时,要判断k的值
			if(k == 1){//k=1时递归结束,保存该结点
				aimNode = root;
			}
			k --;
		}
		if (aimNode == null && root.rightNode != null) {//查找右子树的结点值
			aimNode = findNode(root.rightNode, k);
		}
		return aimNode;
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

剑指offer-面试题63:二叉搜索树的第K个结点

题目:给定一棵二叉搜索树,请找出其中的第K大的结点。例如下图中的二叉树,按加点数值大小顺序第三个结点的值是4。 思路:二叉搜索树的一个重要性质就是它的中序遍历是排序的,因此这道题目只需要用中...
  • moses1213
  • moses1213
  • 2016年05月06日 11:22
  • 1432

数据结构-二叉树和二叉查找树

先按树-二叉树-二叉查找树的顺序解释会比较清楚。 一,树 树(Tree)是n(n≥0)个结点的有限集。在任意一棵非空树中: (1)有且仅有一个特定的被称为根(Root)的结点; (2)当n>1...
  • tuke_tuke
  • tuke_tuke
  • 2015年12月20日 17:44
  • 2058

算法导论12.2查询二叉搜索树 练习总结

12.2-1 假设一棵二叉搜索树中的结点在 1 到 1000 之间,现在想要查找数值为 363 的结点。下面序列中哪个不是查找过的序列? a. 2, 252, 401, 398,330,344,397...
  • chan15
  • chan15
  • 2015年09月28日 18:56
  • 1351

《剑指offer》:[63]二叉搜索树的第K个结点

题目:给定一棵二叉搜索树,请找出其中的第K大的结点。 例如在下图中的二叉树,第四个结点就是:5. 分析:这个题目比较简单,得到二叉树的第K个值,因为我们知道中序遍历一棵二叉排序树得到的就是...
  • gogoky
  • gogoky
  • 2016年06月30日 10:16
  • 1009

【剑指Offer】面试题63:二叉搜索树的第k个结点

一:题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4 二:解题思路  二叉搜索树特...
  • u010059070
  • u010059070
  • 2017年07月28日 16:48
  • 97

剑指offer面试题目63(二叉搜索树的第k个结点)

二叉搜索树的第K个接点, 其中包含了二叉搜索树的创建,寻找其后继; 最小节点等,,若干关于二叉搜索树的操作 #include #include using namespace std; stru...
  • qq_22335577
  • qq_22335577
  • 2015年01月23日 11:05
  • 995

剑指offer 63题 【树】二叉搜索树的第k个结点

题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 3 7 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。 牛客传送门:点击打开链接 思路: 结合二叉搜...
  • f1024042400
  • f1024042400
  • 2016年07月22日 15:21
  • 488

剑指offer 面试题63:二叉搜索树的第k个结点(二叉树中序遍历的应用) 题解

面试题 63:二叉搜索树的第k个结点 题目:给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 (见下面的图1) 中,按结点数值大小顺序第三个结...
  • yanglr2010
  • yanglr2010
  • 2016年05月06日 08:04
  • 1198

剑指offer-面试题63-二叉搜索树的第k个结点

二叉树节点定义: package case63_KthNodeOfBST; /** * 二叉搜索树的结点结构定义 * * @author WangSai * */ public cla...
  • VIP_WangSai
  • VIP_WangSai
  • 2017年04月24日 12:04
  • 219

剑指offer-面试题63:二叉搜索树的第K个结点

题目:给定一棵二叉搜索树,请找出其中的第K大的结点。例如下图中的二叉树,按加点数值大小顺序第三个结点的值是4。 思路:二叉搜索树的一个重要性质就是它的中序遍历是排序的,因此这道题目只需要用中...
  • moses1213
  • moses1213
  • 2016年05月06日 11:22
  • 1432
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Q63:二叉搜索树的第K个结点
举报原因:
原因补充:

(最多只允许输入30个字)