zoukankan      html  css  js  c++  java
  • 对称的二叉树

    题目描述

    请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
     
    解题思路:
    使用队列保存所有的镜像节点,如果队列中只有一个节点,则比较左右节点是否相同,相同则放入队列;如果队列有多个节点,则拿出前两个,比较t1的左儿子与t2的右儿子是否相同,相同则放入队列,比较t1的右儿子与t2的左儿子是否相同,相同则放入队列。类似于广搜思想。
    class Solution {
    public:
        bool isSymmetrical(TreeNode* pRoot)
        {
            if(pRoot == NULL) return true;
            queue<TreeNode*> Myque;
            Myque.push(pRoot);
            TreeNode *tree1, *tree2;
            while(!Myque.empty()){
                tree1 = NULL;
                tree2 = NULL;
                if(Myque.size() == 1){
                    //只有一个节点时只需要比较左右儿子
                    tree1 = Myque.front();
                    Myque.pop();
                    if(tree1->left != NULL && tree1->right != NULL){
                        if(tree1->left->val == tree1->right->val){
                            Myque.push(tree1->left);
                            Myque.push(tree1->right);
                        }else{
                            return false;
                        }
                    }else if(tree1->left == NULL && tree1->right != NULL){
                        return false;
                    }else if(tree1->left != NULL && tree1->right == NULL){
                        return false;
                    }
                }else{
                    tree1 = Myque.front();
                    Myque.pop();
                    tree2 = Myque.front();
                    Myque.pop();
                    //比较tree1的左儿子与tree2的右儿子值是否相同
                    if(tree1->left != NULL && tree2->right != NULL){
                        if(tree1->left->val == tree2->right->val){
                            Myque.push(tree1->left);
                            Myque.push(tree2->right);
                        }else{
                            return false;
                        }
                    }else if(tree1->left != NULL && tree2->right == NULL){
                        return false;
                    }else if(tree1->left == NULL && tree2->right != NULL){
                        return false;
                    }
                    //比较tree1的右儿子与tree2的左儿子值是否相同
                    if(tree1->right != NULL && tree2->left != NULL){
                        if(tree1->right->val == tree2->left->val){
                            Myque.push(tree1->right);
                            Myque.push(tree2->left);
                        }else{
                            return false;
                        }
                    }else if(tree1->right != NULL && tree2->left == NULL){
                        return false;
                    }else if(tree1->right == NULL && tree2->left != NULL){
                        return false;
                    }
                }
            }
            return true;
        }
    };
    

      

  • 相关阅读:
    java用户角色权限设计
    六种方式实现hibernate查询,及IDE推荐
    SSH远程会话管理工具
    Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置
    Linux 下JDK安装
    linux下FTP的工具和使用以及rpmReadSignature failed错误
    不用FTP使用SecureCRT上传下载文件,并解决rz、sz command not found异常
    hibernate通过数据库表反向生成实体类
    解决vmware 桥联 再次使用联不上网的问题
    log4j详解与实战
  • 原文地址:https://www.cnblogs.com/chengsheng/p/10700436.html
Copyright © 2011-2022 走看看