• 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 };
  • 相关阅读:
    centos7下安装docker
    java中获取两个时间中的每一天
    Linq中string转int的方法
    logstash 主题综合篇
    Windows环境下ELK(5.X)平台的搭建
    本地没问题 服务器 提示 Server Error in '/' Application
    错误 未能找到类型或命名空间名称"xxxxxx"的真正原因
    System.web和System.WebServer
    Chrome Adobe Flash Player 因过期而 阻止
    请求WebApi的几种方式
  • 原文地址:https://www.cnblogs.com/rogarlee/p/3452432.html
Copyright © 2020-2023  润新知