由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - leetcode上Symmetric Tree这道题怎么用iterative的方法做?
相关主题
Leetcode: Symmetric Tree有没有好的iterative的解法?谁来解释下hashtable的iterator是怎么实现的
写了个symmetric tree的stack based iterative实现,有个bugGOOG ONSITE 面试
请问怎么样才能想到关于tree等比较简洁的答案呢?同时记一下超慢速刷题过半以鼓励自己新鲜Amazon面经(附参考答案) 顺便求各种大公司refer
大牛帮我看看这哪错了? iterative inorder traversal问了一个链表,1->2->3->4->5, 每两个交换,2->1->4->3->5
遇到了一个很奇怪的C++问题Uni_value subtree problem
求问一个Java问题[leetcode] Maximum Depth of Binary Tree
请教为什么这段程序运行不work?(doubly linked list) (转载这个inorder traversal 有错嘛,为什么leetcode 总报memory limit exceed?
树中序遍历,要求左子树用递归,右子树用iteration热腾腾的 LinkedIn 电面题攒RP
相关话题的讨论汇总
话题: treenode话题: null话题: n2话题: n1话题: left
进入JobHunting版参与讨论
1 (共1页)
k*******a
发帖数: 433
1
我只做出来了recursive的方法,请问迭代的方法怎么做?
谢谢!
c*******e
发帖数: 621
2
所有recursive的题都能用stack做 你要熟悉啊
tripadvisor考到过
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(root==NULL)return true;
if(root->left==NULL||root->right==NULL){
if(root->left==NULL&&root->right==NULL)return true;
return false;
}
stack s1,s2;
s1.push(root->left);
s2.push(root->right);
while(!s1.empty()&&!s2.empty()){
TreeNode *n1=s1.top(),*n2=s2.top();
s1.pop();s2.pop();
if(n1->val!=n2->val)return false;
if(n1->left!=NULL&&n2->right!=NULL){
s1.push(n1->left);
s2.push(n2->right);
}
else if(n1->left!=NULL||n2->right!=NULL)
return false;
if(n1->right!=NULL&&n2->left!=NULL){
s1.push(n1->right);
s2.push(n2->left);
}
else if(n1->right!=NULL||n2->left!=NULL)
return false;
}
return true;
}
};
k*******a
发帖数: 433
3
你好牛!
谢了!

【在 c*******e 的大作中提到】
: 所有recursive的题都能用stack做 你要熟悉啊
: tripadvisor考到过
: /**
: * Definition for binary tree
: * struct TreeNode {
: * int val;
: * TreeNode *left;
: * TreeNode *right;
: * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
: * };

j*****0
发帖数: 160
4
我用的bst,思想就是左子树放一个队列右子树以反方向放一个队列,然后从队列中抽
出脑袋的时候比比。
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
Queue left_q = new LinkedList();
Queue right_q = new LinkedList();
left_q.offer(root.left);
right_q.offer(root.right);
while (!left_q.isEmpty() && !right_q.isEmpty()) {
TreeNode left = left_q.poll();
TreeNode right = right_q.poll();
if (left == null && right == null) {
continue;
} else if (left == null || right == null) {
return false;
} else {
if (left.val != right.val) {
return false;
}
left_q.offer(left.left);
left_q.offer(left.right);
right_q.offer(right.right);
right_q.offer(right.left);
}
}
return true;
}
k*******a
发帖数: 433
5
你们两个都很强大!
前者用的c++,不知道后面那个用的什么语言啊?
j*****0
发帖数: 160
6
java,我把前面class去掉了

【在 k*******a 的大作中提到】
: 你们两个都很强大!
: 前者用的c++,不知道后面那个用的什么语言啊?

I**********s
发帖数: 441
7
也用stack. 简洁一些,也能过。
bool isSymmetric3(TreeNode * root) {
if (! root) return true;
stack s1, s2;
s1.push(root->left);
s2.push(root->right);

while(! s1.empty() && ! s2.empty()) {
TreeNode * n1 = s1.top(); s1.pop();
TreeNode * n2 = s2.top(); s2.pop();

if (!n1 && !n2) continue;
if (!n1 || !n2 || n1->val != n2->val) return false;

s1.push(n1->left);
s1.push(n1->right);
s2.push(n2->right);
s2.push(n2->left);
}
return true;
}
I**********s
发帖数: 441
8
完全相同的结构,改用queue, 也能过:
bool isSymmetric(TreeNode * root) {
if (! root) return true;
queue s1, s2;
s1.push(root->left);
s2.push(root->right);

while(! s1.empty() && ! s2.empty()) {
TreeNode * n1 = s1.front(); s1.pop();
TreeNode * n2 = s2.front(); s2.pop();

if (!n1 && !n2) continue;
if (!n1 || !n2 || n1->val != n2->val) return false;

s1.push(n1->left);
s1.push(n1->right);
s2.push(n2->right);
s2.push(n2->left);
}
return true;
}
1 (共1页)
进入JobHunting版参与讨论
相关主题
热腾腾的 LinkedIn 电面题攒RP遇到了一个很奇怪的C++问题
帮我看一下5行代码求问一个Java问题
Flatten Binary Tree to Linked List的recursive解法请教为什么这段程序运行不work?(doubly linked list) (转载
min depth binary tree用recursive解法一般能过关麽?树中序遍历,要求左子树用递归,右子树用iteration
Leetcode: Symmetric Tree有没有好的iterative的解法?谁来解释下hashtable的iterator是怎么实现的
写了个symmetric tree的stack based iterative实现,有个bugGOOG ONSITE 面试
请问怎么样才能想到关于tree等比较简洁的答案呢?同时记一下超慢速刷题过半以鼓励自己新鲜Amazon面经(附参考答案) 顺便求各种大公司refer
大牛帮我看看这哪错了? iterative inorder traversal问了一个链表,1->2->3->4->5, 每两个交换,2->1->4->3->5
相关话题的讨论汇总
话题: treenode话题: null话题: n2话题: n1话题: left