• Leetcode Symmetric Tree


    非递归解法

    /**
     * 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) {
           stack <TreeNode*> stackLeft;
           stack <TreeNode*> stackRight;
           
           if(root == NULL ||(root && (!root->left) && (!root->right))){
               return true;
           }
           
           if((root->left && (!root->right))||(!root->left && root->right)){
               return false;
           }
           TreeNode *pLeft = root->left;
           TreeNode *pRight = root->right;
           while((pLeft||(!stackLeft.empty())) && (pRight ||(!stackRight.empty()))){
                while(pLeft && pRight){
                   
                    if(pLeft->val != pRight->val){
                        return false;
                    }
                    stackLeft.push(pLeft); 
                    pLeft = pLeft->left;
                    stackRight.push(pRight);
                    pRight = pRight->right;
                }
                
                if(pLeft || pRight){
                    return false;
                }
                
                pLeft = stackLeft.top();
                stackLeft.pop();
                pLeft = pLeft->right;
                
                pRight = stackRight.top();
                stackRight.pop();
                pRight = pRight->left;
           }
           
           if( (pLeft||(!stackLeft.empty())) || (pRight ||(!stackRight.empty()))){
               return false;
           }
           
           return true;
        }
    };<pre name="code" class="cpp">
    
    
    
    

    递归解法

    /**
     * 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) {
           if(root == NULL || (root && !root->left && !root->right)){
               return true;
           }
           
           if( (root->left && !root->right) || (!root->left && root->right) ) {
               return false;
           }
           
           return checkLeftAndRight(root->left, root->right);
        }
        
        bool checkLeftAndRight(TreeNode *pLeft, TreeNode *pRight){
            
            if(!pLeft && !pRight){
                return true;
            }
            
            if( (pLeft && !pRight) || (!pLeft && pRight)){
                return false;
            }
            
            if(pLeft->val == pRight->val){
                return checkLeftAndRight(pLeft->left, pRight->right) && checkLeftAndRight(pLeft->right, pRight->left);
            } else {
                return false;
            }
        }
    };


  • 相关阅读:
    使用gulp搭建less编译环境
    用原生js封装轮播图
    NodeJS
    npm使用入门
    漫谈JS 的继承方式
    同源策略、跨域解决方案
    脚本学习一(echo、echo off、@、start)
    统计英文文档里每个单词出现的次数
    Dijkstra算法和Floyd算法的正确性证明
    Prim算法和Kruskal算法的正确性证明
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6884464.html
Copyright © 2020-2023  润新知