Leetcode 101. Symmetric Tree
来源:互联网 发布:免费音乐广告制作软件 编辑:程序博客网 时间:2024/05/21 21:59
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
1 / \ 2 2 / \ / \3 4 4 3
But the following [1,2,2,null,3,null,3] is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
s思路:
1. 树,选用那种遍历方式最快?要比较是否左右镜像对称。初看,想到用deque的bfs,把每层的数先全部放入deque,然后每次从两端取指针,看是否指针要么都null,要么都有、且数字相等。用deque还是麻烦,又想到可以用两个queue就可以解决问题,对root的左子树所有节点用一个queue来装,右子树用另一个queue来装。左子树每一层从左往右装,右子树每一层从右往左装,分别读出来比较即可!!妙啊!
2. 这个用两个queue的方法,应该是思维上受到上一题比较两个树是否相等的方法启发!
2. 再思考,还可以recursive. 用两个指针来比较。比较是否对称的树,就是比较除root外,左子树的左孩子和右子树的右孩子是否值相等,以及左子树的右孩子和右子树的左孩子是否值相等,然后从上往下,每个节点都这么比较。关键是:每次recursive需要两次比较和两次调用自己。因此,函数结构:需要两个指针分别表示左右指针,同时两次比较调用自己。
//方法1:recursiveclass Solution {public: bool helper(TreeNode* l,TreeNode* r){ if(!l&&!r) return true; if(l&&r&&l->val==r->val) return helper(l->left,r->right)&&helper(l->right,r->left); return false;//bug:两个指针,讨论空还是有,四种组合都要面面俱到 } bool isSymmetric(TreeNode* root) { if(!root) return true; return helper(root->left,root->right); }};//方法2:iterativeclass Solution {public: bool isSymmetric(TreeNode* root) { if(!root) return true; queue<TreeNode*> pp,qq; pp.push(root->left); qq.push(root->right); while(!pp.empty()||!qq.empty()){ int psize=pp.size(),qsize=qq.size(); //if(psize!=qsize) return false; TreeNode* cur_p;//笔误bug:每次容易把TreeNode顺手写成ListNode TreeNode* cur_q; for(int i=0;i<psize;i++){ cur_p=pp.front(); cur_q=qq.front(); pp.pop();qq.pop(); if(!cur_p&&cur_q||cur_p&&!cur_q||cur_p&&cur_q&&cur_p->val!=cur_q->val) return false; if(cur_p&&cur_q&&cur_p->val==cur_q->val){ pp.push(cur_p->left); pp.push(cur_p->right); qq.push(cur_q->right); qq.push(cur_q->left); } } } return true; }};
- LeetCode 101. Symmetric Tree
- [LeetCode]101.Symmetric Tree
- 【LeetCode】101.Symmetric Tree
- [Leetcode] 101. Symmetric Tree
- LeetCode --- 101. Symmetric Tree
- [leetcode] 101.Symmetric Tree
- LeetCode : 101. Symmetric Tree
- [leetcode]101.Symmetric Tree
- Leetcode 101. Symmetric Tree
- 101. Symmetric Tree LeetCode
- [LeetCode]101. Symmetric Tree
- [LeetCode]101. Symmetric Tree
- [LeetCode]101. Symmetric Tree
- leetcode 101. Symmetric Tree
- LeetCode#101. Symmetric Tree
- Leetcode 101. Symmetric Tree
- Leetcode 101. Symmetric Tree
- LeetCode *** 101. Symmetric Tree
- 196UVa电子表格
- <Python初学>Python中的变量类型。对赋值、浅拷贝与深拷贝的初步认识。
- Leetcode 98. Validate Binary Search Tree
- Leetcode 100. Same Tree
- COVER王锐大大——最长的一帧(第四日)
- Leetcode 101. Symmetric Tree
- Python轻松入门-09 Range函数和While循环
- Leetcode 43. Multiply Strings
- Rails:Ubuntu下连接Git提示Permission denied的解决方法
- [python]mac安装virtualenv
- callee caller
- 开发板串口连接
- Maze CodeForces - 377A
- 第三十四课:数组操作符的重载----------狄泰软件学院