Symmetric Tree @leetcode

!本题分为迭代版和递归版,递归版比较直接,按照树遍历即可。跌代版这里创建了两个队列,每遇到一对节点(初始为根节点的左右子):

1.先对比这两个节点的值是否相等:不相等则结束循环,相等则进入2

2.把它们的左右子节点,交叉安插到自己的队列中,然后对队列里的front,作为一对节点,走1

!iterative

 1 if(!root) return true;
 2         queue<TreeNode*> queueStep;
 3         queue<TreeNode*> queueStep2;
 4         TreeNode *tn1,*tn2;
 5         tn1 = root->left;
 6         tn2 = root->right;
 7         while(1){
 8             if(!tn1 && tn2) return false;
 9             if(!tn2 && tn1) return false;
10             if(tn1 && tn2 && tn1->val != tn2->val) return false;
11             
12             if(tn1){
13                 queueStep.push(tn1->left);
14                 queueStep.push(tn1->right);
15             }
16             if(tn2){
17                 queueStep2.push(tn2->right);
18                 queueStep2.push(tn2->left);
19             }
20             if(queueStep.size() == 0 && queueStep2.size() == 0) return true;
21             /*else if(queueStep.size() == 0) return false;
22             else if(queueStep2.size() == 0) return false;*/
23 
24             tn1 = queueStep.front();
25             queueStep.pop();
26 
27             tn2 = queueStep2.front();
28             queueStep2.pop();
29         }

!recursive

 1 /**
 2  * Definition for binary tree
 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 isSymmetric(TreeNode *root) {
13         if(root == NULL) return true;
14         return isSymmetricSmall(root->left,root->right);
15     }
16 
17     bool isSymmetricSmall(TreeNode *left,TreeNode *right){
18         if(left == NULL && right == NULL) return true;
19         else if(left == NULL) return false;
20         else if(right == NULL) return false;
21 
22         if(left->val != right->val) return false;
23         
24         if(isSymmetricSmall(left->right,right->left) && isSymmetricSmall(left->left,right->right))
25             return true;
26         else
27             return false;
28     }
29 };
原文地址:https://www.cnblogs.com/rogarlee/p/3452432.html