设置了两个递归方法外的全局变量,分别来储存当前离目标结点还差几个节点了,一个用来储存最终寻找到的目标节点。递归就是很普通的中序遍历,只不过要注意的优化点是:第一,当成功找到第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); }