• 刷题101. Symmetric Tree


    一、题目说明

    题目101. Symmetric Tree,给定一个二叉树,判断是否对称。题目难度是Easy!

    二、我的解答

    这个题目不难,但是做错了2次(开始以为“前序遍历”和“后序遍历”对称即可,实际上不是)。递归方法的代码:

    class Solution{
    	public:
    		bool isMirror(TreeNode* t1,TreeNode*t2){
    			if(t1==NULL && t2==NULL) return true;
    			if(t1==NULL || t2==NULL) return false;
    			return (t1->val==t2->val) && isMirror(t1->left,t2->right) && isMirror(t1->right,t2->left);
    		}
    		bool isSymmetric(TreeNode* root){
    			return isMirror(root,root);
    		}
    };
    

    性能:

    Runtime: 8 ms, faster than 52.13% of C++ online submissions for Symmetric Tree.
    Memory Usage: 14.7 MB, less than 88.14% of C++ online submissions for Symmetric Tree.
    

    三、优化措施

    非递归算法,需要用一个队列queue,先判断根是否对称,然后判断左子树和右子树是否对称。

    class Solution{
    	public:
    		//iterative
    		bool isSymmetric(TreeNode* root){
    			if(root==NULL || (root->left==NULL && root->right==NULL)){
    				return true;
    			}
    			queue<TreeNode*> q;
    			//将左右子树入队列
    			q.push(root->left);
    			q.push(root->right);
    			while(!q.empty()){
    			    //左子树出队列
    				TreeNode* l = q.front();
    				q.pop();
    				//左子树出队列
    				TreeNode* r = q.front();
    				q.pop();
    				if(l ==NULL && r==NULL){
    					continue;
    				}
    				if(l==NULL || r==NULL){
    					return false;
    				}
    				if(l->val != r->val){
    					return false;
    				}
    				
    				//将左子树的“左子树”,右子树的“右子树”入队列
    				q.push(l->left);
    				q.push(r->right);
    				
    				//将左子树的“右子树”,右子树的“左子树”入队列
    				q.push(l->right);
    				q.push(r->left);
    			}
    			
    			return true;
    		}
    };
    

    性能如下:

    Runtime: 4 ms, faster than 85.48% of C++ online submissions for Symmetric Tree.
    Memory Usage: 14.7 MB, less than 91.53% of C++ online submissions for Symmetric Tree.
    
    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    Docker 0x05: Dockerfile制作镜像
    Docker 0x04: Docker 基本使用
    Docker 0x03:Install Docker
    Docker 0x02: Docker生态
    Docker 0x01:Docker Container容器技术
    Axios发送AJAX请求
    Django学习之十三:提高页面开发效率减少冗余的模板系统
    javascript获取指定区间范围随机数
    完美解决eclipse编辑器中文字符过小问题
    mysql查询表所有列名,并用逗号分隔
  • 原文地址:https://www.cnblogs.com/siweihz/p/12266248.html
Copyright © 2020-2023  润新知