DFS遍历整棵树
可以发现,当沿着左子树向下遍历时,回溯的过程是从小到大的。当沿着右子树向下遍历时,遍历的过程是从小到大的。
因此在递归遍历的基础上,每次从左子树回来的时候,令计数器加一。每次进入右子树前令计数器加一。显然只有当该节点没有左子树时才需要进入右子树前加一,没有右子树时才需要从左子树返回时加一。因此只需要加一次就够了
自己的(0ms)
class Solution {
int num = 0,ans;
void find(TreeNode root,int k){
if(root.left != null)
find(root.left,k);
num++;
if(num == k)
ans = root.val;
if(root.right != null)
find(root.right,k);
}
public int kthSmallest(TreeNode root, int k) {
find(root,k);
return ans;
}
}