设置了两个递归方法外的全局变量,分别来储存当前离目标结点还差几个节点了,一个用来储存最终寻找到的目标节点。递归就是很普通的中序遍历,只不过要注意的优化点是:第一,当成功找到第k个点时,后续的节点无须继续遍历;第二,当整棵树都遍历完成却依然没达到k这个大小,那就要返回null(没找到)
TreeNode KthNode(TreeNode pRoot, int k){
if(pRoot==null) return null;
int[] kk =new int[1];
kk[0]=k;
TreeNode[] res = new TreeNode[1];
search(pRoot,kk,res);
return kk[0]==0?res[0]:null;
}
void search(TreeNode head, int[] kk,TreeNode[] res) {
if(kk[0]==0)return;
if(head.left!=null) search(head.left, kk,res);
if(kk[0]==0)return;
if(kk[0]--==1) {
res[0]=new TreeNode(head.val);
return;
}
if(head.right!=null) search(head.right, kk,res);
}
京公网安备 11010502036488号