新农上路
- 积分
- 99
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-7-7
- 最后登录
- 1970-1-1
|
可以用morris traversal,非递归并且常数空间
int count_duplicates(TreeNode* root){
if(!root) return 0;
TreeNode* pre = NULL;
TreeNode* curr = root;
int res = 0;
while(curr){
if(curr->left){
TreeNode* x = curr->left;
while(x->right && x->right != curr) x=x->right;
if(x->right == curr){
x->right = NULL;
if(pre && pre->val == curr->val) res++;
pre = curr;
curr = curr->right;
}
else{
x->right = curr;
curr = curr->left;
}
}
else{
if(pre && pre->val == curr->val) res++;
pre = curr;
curr = curr->right;
}
}
return res;
}
|
|