• (剑指Offer)面试题59:对称的二叉树


    题目:

    请实现一个函数,用来判断一颗二叉树是不是对称的。

    注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

    思路:

    对于一棵二叉树,从根结点开始遍历,

    如果左右子结点有一个为NULL,那么肯定不是对称二叉树;

    如果左右子结点均不为空,但不相等,那么肯定不是对称二叉树;

    如果左右子结点均不为空且相等,那么

    遍历左子树,遍历顺序为:当前结点,左子树,右子树;

    遍历右子树,遍历顺序为:当前结点,右子树,左子树;

    如果遍历左子树的序列和遍历右子树的序列一样,那么该二叉树为对称的二叉树。(递归实现)

    另外一种角度考虑:

    把每个结点的左右子树分别看成一棵独立的二叉树,那么判断该二叉树是否为对称的,只需判断左右子树是否互为镜像即可。

    在线测试OJ:

    http://www.nowcoder.com/books/coding-interviews/ff05d44dfdb04e1d83bdbdab320efbcb?rp=3

    AC代码:

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    class Solution {
    public:
        bool isSymmetrical(TreeNode* pRoot)
        {
        	return isSymetrical(pRoot,pRoot);
        }
    
        bool isSymetrical(TreeNode* pLeft,TreeNode* pRight){
            if(pLeft==NULL && pRight==NULL)
                return true;
            if(pLeft==NULL || pRight==NULL)
                return false;
            if(pLeft->val!=pRight->val)
                return false;
            return isSymetrical(pLeft->left,pRight->right) && isSymetrical(pLeft->right,pRight->left);
        }
    };
  • 相关阅读:
    bash 大致学习后的小案例,导出数据进行打包
    android 处理图片工具
    js屏蔽文本选中产生的蓝色背景色
    修正IE6不支持position:fixed的bug
    TreeView ShowCheckBox [文摘]
    存储过程分页程序
    GridView 72般绝技 很棒的东西 收藏..
    GridView 自带排序分页
    字符串补位
    sql2005 定义临时表
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4719211.html
Copyright © 2020-2023  润新知