标签:tree 面试题 right 54 Tree value 二叉 public left
题目:
给定一棵二叉搜索树,请找出其中第k大的结点。
分析:
对二叉搜索树的中序遍历结果,是一个从小到大的有序序列,要找第K大结点,可以将有序序列变成从大到小的,也就是使用右根左的顺序递归遍历,同时使用一个计数器,当计数器达到k的时候,就是第k大结点了。
解法:
package com.wsy;
class Tree {
private int value;
private Tree left;
private Tree right;
public Tree() {
}
public Tree(int value) {
this.value = value;
this.left = this.right = null;
}
public Tree(int value, Tree left, Tree right) {
this.value = value;
this.left = left;
this.right = right;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public Tree getLeft() {
return left;
}
public void setLeft(Tree left) {
this.left = left;
}
public Tree getRight() {
return right;
}
public void setRight(Tree right) {
this.right = right;
}
}
public class Main {
public static int count;
public static void main(String[] args) {
Tree tree = init();
int k = 3;
getKth(tree, k);
}
public static Tree init() {
Tree tree8 = new Tree(8);
Tree tree6 = new Tree(6);
Tree tree4 = new Tree(4);
Tree tree2 = new Tree(2);
Tree tree7 = new Tree(7, tree6, tree8);
Tree tree3 = new Tree(3, tree2, tree4);
Tree tree5 = new Tree(5, tree3, tree7);
return tree5;
}
public static void getKth(Tree tree, int k) {
if (tree == null || k < 1) {
return;
}
if (tree.getRight() != null) {
getKth(tree.getRight(), k);
}
count++;
if (count == k) {
System.out.println("第" + k + "大的结点是:" + tree.getValue());
}
if (tree.getLeft() != null) {
getKth(tree.getLeft(), k);
}
}
}
王劭阳 发布了181 篇原创文章 · 获赞 1 · 访问量 7421 私信 关注
标签:tree,面试题,right,54,Tree,value,二叉,public,left 来源: https://blog.csdn.net/qq_36059561/article/details/104390260
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。