请推荐带SPF的日霜# Fashion - 美丽时尚
a*e
1 楼
Symmetric Tree一开始又把题理解错了。后来弄了个recursion之后,写了如下这个冗
长的 iterative version. 后来看了别人写的发现用一个stack要简洁好多好多。估计
是same tree那道题偷了懒,没认真看iterative的做法。
请问怎么样才能想到比较简洁的答案呢?是不是还是得多练?
从2月中就断断续续的刷,151道做了77道,希望年底能搞完一遍。N年前的今天来到美
国,雄心壮志要当教授,开公司,现在备受打击后,只是很实际的希望找个喜欢的工作
,能够在不爽的时候快点离开!
bool isSymmetric(TreeNode *root) {
if (root==NULL||(root->left==NULL &&root->right==NULL)) return true;
if ((root->left==NULL && root->right!=NULL)||(root->left!=NULL&&root
->right==NULL))
{
return false;
}
queue left, right;
queue leftN, rightN;
left.push(root->left);
right.push(root->right);
while(1)
{
while(!left.empty()&&!right.empty())
{
TreeNode *tmpLeft = left.front();
TreeNode *tmpRight = right.front();
if (tmpLeft==tmpRight && tmpLeft==NULL)
{
left.pop();
right.pop();
continue;
}
if (tmpLeft==NULL||tmpRight==NULL)
{
return false;
}
if (tmpLeft->val!=tmpRight->val)
return false;
else
{
leftN.push(tmpLeft->left);
leftN.push(tmpLeft->right);
rightN.push(tmpRight->right);
rightN.push(tmpRight->left);
left.pop();
right.pop();
}
}
if (leftN.empty() &&rightN.empty())
break;
swap(left,leftN);
swap(right,rightN);
}
return true;
}
长的 iterative version. 后来看了别人写的发现用一个stack要简洁好多好多。估计
是same tree那道题偷了懒,没认真看iterative的做法。
请问怎么样才能想到比较简洁的答案呢?是不是还是得多练?
从2月中就断断续续的刷,151道做了77道,希望年底能搞完一遍。N年前的今天来到美
国,雄心壮志要当教授,开公司,现在备受打击后,只是很实际的希望找个喜欢的工作
,能够在不爽的时候快点离开!
bool isSymmetric(TreeNode *root) {
if (root==NULL||(root->left==NULL &&root->right==NULL)) return true;
if ((root->left==NULL && root->right!=NULL)||(root->left!=NULL&&root
->right==NULL))
{
return false;
}
queue
queue
left.push(root->left);
right.push(root->right);
while(1)
{
while(!left.empty()&&!right.empty())
{
TreeNode *tmpLeft = left.front();
TreeNode *tmpRight = right.front();
if (tmpLeft==tmpRight && tmpLeft==NULL)
{
left.pop();
right.pop();
continue;
}
if (tmpLeft==NULL||tmpRight==NULL)
{
return false;
}
if (tmpLeft->val!=tmpRight->val)
return false;
else
{
leftN.push(tmpLeft->left);
leftN.push(tmpLeft->right);
rightN.push(tmpRight->right);
rightN.push(tmpRight->left);
left.pop();
right.pop();
}
}
if (leftN.empty() &&rightN.empty())
break;
swap(left,leftN);
swap(right,rightN);
}
return true;
}