leetcode Symmetric Tree

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree is symmetric:

    1
   / \
  2   2
 / \ / \
3  4 4  3

 

But the following is not:

    1
   / \
  2   2
   \   \
   3    3



刚开始看这道题,感觉层序遍历可行,当时觉得递归不可行,想了用队列还是双向队列还是vector。= =
后来才发现层序遍历不可行啊,你看第二个例子满足层序遍历的结果是回文(本来想用层序遍历+回文)然而并不是对称树。
后来就觉得用递归,但是递归最重要的就是思想,想了很久不知道该怎么递归。
如果是递归的话,根节点的情况应该是例外的啊。陷入沉思,总之节点都是两两比较,应该构建一个两两比较的函数。于是构建了isReverse函数,判断两个树是不是对称的。
具体的思想说不上来,就是自己画了一个例子,然后想到底要判断哪些节点。

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     bool isReverse(TreeNode* p,TreeNode* q){
13         if(p==NULL||q==NULL){
14             if(p==NULL&&q==NULL) return true;
15             else return false;
16         }
17         else{ 
18             if(p->val==q->val) 
19                 return isReverse(p->left,q->right)&&isReverse(p->right,q->left);
20             else return false;
21         }
22     }
23     
24     bool isSymmetric(TreeNode* root) {
25         if(root==NULL) return true;
26         return isReverse(root->left,root->right);
27         }
28         
29 };




补充一点关于堆和栈的知识:

1、stack
stack 模板类的定义在<stack>头文件中。
stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要
的,在不指定容器类型时,默认的容器类型为deque。
定义stack 对象的示例代码如下:
stack<int> s1;
stack<string> s2;
stack 的基本操作有:
入栈,如例:s.push(x);
出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素。
访问栈顶,如例:s.top()
判断栈空,如例:s.empty(),当栈空时,返回true。
访问栈中的元素个数,如例:s.size()。

 

2、queue
queue 模板类的定义在<queue>头文件中。
与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类
型,元素类型是必要的,容器类型是可选的,默认为deque 类型。
定义queue 对象的示例代码如下:
queue<int> q1;
queue<double> q2;

queue 的基本操作有:
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()

 

 
posted @ 2015-11-23 13:58  0giant  阅读(211)  评论(0编辑  收藏  举报