思路
使用morris中序遍历,遍历到第k个节点时就是第k小的数。
提交代码:
class Solution {
public int kthSmallest(TreeNode root, int k) {
TreeNode p1=root,p2=root;
int cnt=0;
while(p1!=null) {
if(p1.left!=null) {
p2=p1.left;
while(p2.right!=null&&p2.right!=p1)
p2=p2.right;
if(p2.right==null) {
p2.right=p1;
p1=p1.left;
}else {
p2.right=null;
cnt++;
if(cnt==k) return p1.val;
p1=p1.right;
}
}else {
cnt++;
if(cnt==k) return p1.val;
p1=p1.right;
}
}
return root.val;
}
}