二叉搜索树的第k个结点
描述
给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。
解题
二叉树
public class TreeNode {
int val=0;
TreeNode left=null;
TreeNode right=null;
public TreeNode(int val) {
this.val = val;
}
}
Solution1
/**
* 查找二叉树中的第k个节点
* 非递归中序遍历
*/
import java.util.Stack;
public class Solution {
TreeNode kthNode(TreeNode pRoot,int k){
if (pRoot==null||k<1) return null;
Stack<TreeNode> stack=new Stack<>();//栈方法
TreeNode cur = pRoot;
while (!stack.empty()||cur!=null){
if (cur!=null){
stack.push(cur);//压入左孩子节点
cur=cur.left;
}else {
cur=stack.pop();
if (--k==0){
return cur;//出栈
}
cur=cur.right;
}
}
return null;
}
}
Solution2
/**
* 查找二叉树中的第k个节点
* 递归中序遍历 表方法
*/
import java.util.ArrayList;
public class Solution2 {
ArrayList<TreeNode> list = new ArrayList<>();
TreeNode kthNode(TreeNode pRoot,int k){
addNode(pRoot);
if (k>0&&list.size()>=k){
return list.get(k-1);//取第k个值
}
return null;
}
void addNode(TreeNode cur){
if (cur!=null){
addNode(cur.left);
list.add(cur);
addNode(cur.right);
}
}
}