题解 | #二叉搜索树的第k个节点#
二叉搜索树的第k个节点
http://www.nowcoder.com/practice/57aa0bab91884a10b5136ca2c087f8ff
思路:
本题是求第k个元素,且给出的树是二叉搜索树,该树有一个特点即根结点值介于左、右子节点之间,于是对树中序遍历,得到一个升序集合,求集合里第k个元素返回其值。
public class Solution {
//中序遍历,结果存入ArrayList中
public void traverse (TreeNode root, List<Integer> l) {
if (root==null)
return;
traverse(root.left, l);
l.add(root.val);
traverse(root.right, l);
}
public int KthNode (TreeNode proot, int k) {
if (proot==null) //特殊情况处理
return -1;
List<Integer> l = new ArrayList<>();
traverse(proot, l); //遍历得升序集合
if (k>l.size()||k<1) //特殊情况处理
return -1;
return l.get(k-1);
}
}
查看13道真题和解析