题解 | #二叉搜索树的第k个节点# 【迭代 & 中序遍历】
二叉搜索树的第k个节点
https://www.nowcoder.com/practice/57aa0bab91884a10b5136ca2c087f8ff
1. 方法一:迭代法
2. 方法二:中序遍历
// 方法一:迭代法
public int KthNode1 (TreeNode proot, int k) {
// write code here
if(proot == null || k == 0) return -1;
Stack<TreeNode> stack = new Stack<>();
TreeNode cur = proot;
while(cur != null || !stack.isEmpty()){
while(cur != null){
stack.push(cur);
cur = cur.left;
}
if(!stack.isEmpty()){
cur = stack.pop();
if(--k == 0){
return cur.val;
}
}
cur = cur.right;
}
return -1;
}
-----------------
// 方法二:中序遍历
List<Integer> list = new ArrayList<>();
public int KthNode (TreeNode proot, int k) {
// write code here
if(proot == null || k == 0) return -1;
inOrder(proot);
return k <= list.size() ? list.get(k-1) : -1;
}
private void inOrder(TreeNode proot){
if(proot == null) return;
inOrder(proot.left);
list.add(proot.val);
inOrder(proot.right);
}