题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
【解决】
① 使用一个变量记录遍历的个数
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
int count = 0;
TreeNode KthNode(TreeNode pRoot, int k) {
if (pRoot == null || k <= 0){
return null;
}
TreeNode res = null;
if (pRoot.left != null){
res = KthNode(pRoot.left,k);
}
count ++;
if (res == null){
if (count == k){
res = pRoot;
return res;
}
}
if (res == null && pRoot.right != null){
res = KthNode(pRoot.right,k);
}
return res;
}
}
② 使用一个变量保存中序遍历的结果
import java.util.ArrayList;
import java.util.List;
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
List<TreeNode> list = new ArrayList<>();
TreeNode KthNode(TreeNode pRoot, int k) {
if (k == 0) return null;
inorder(pRoot);
if (k > list.size()) return null;
return list.get(k - 1);
}
public void inorder(TreeNode root){
if (root == null) return;
inorder(root.left);
list.add(root);
inorder(root.right);
}
}