• 剑指offer58:对称的二叉树。判断一颗二叉树是不是对称的,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的


    1 题目描述

      请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

    2 思路和方法

      定义一种遍历算法,先遍历右子结点再遍历左子结点;如对称先序遍历:根结点->右子结点->左子结点而先序遍历:根结点->左子结点->右子结点通过比较二叉树的先序遍历和对称先序遍历的序列是否相同来判断二叉树是否对称。注意:因为二叉树的元素可能全部相同,所以将遍历过程中的nullptr也考虑进来。

    3 C++核心代码

     1 /*
     2 struct TreeNode {
     3     int val;
     4     struct TreeNode *left;
     5     struct TreeNode *right;
     6     TreeNode(int x) :
     7             val(x), left(NULL), right(NULL) {
     8     }
     9 };
    10 */
    11 class Solution {
    12 public:
    13     bool isSymmetrical(TreeNode* pRoot)
    14     {
    15         return issymmetrical(pRoot,pRoot);
    16     }
    17     
    18     //比较二叉树的先序遍历序列(根->左->右)和对称先序遍历序列(根->右->左),若相等,则对称
    19     bool issymmetrical(TreeNode* pRoot1,TreeNode* pRoot2){
    20         
    21         if(pRoot1==NULL && pRoot2==NULL)
    22             return true;        //因为可能存在所有元素相等的情况;遍历序列考虑nullptr
    23         
    24         // 一个空指针,另一个非空指针
    25         if(pRoot1==NULL || pRoot2==NULL)
    26             return false;
    27         
    28         if(pRoot1->val!=pRoot2->val)
    29             return false;
    30         
    31         return issymmetrical(pRoot1->right,pRoot2->left) && issymmetrical(pRoot1->left,pRoot2->right);
    32     }
    33 };
    View Code

    参考资料

    https://blog.csdn.net/zjwreal/article/details/89282964

  • 相关阅读:
    【线程退出】linux线程退出的几个函数
    Apache Doris编译安装记录
    你所不知道的java编程思想
    thinking in java知识小记(一)
    一个程序员的修炼之路
    解决linux不能使用chmod更改权限的问题
    centos6.5配置无线网络
    ubuntu16.04 server安装小记
    vim的基本使用方法
    微信之父张小龙经典演讲164页PPT:《微信背后的产品观》
  • 原文地址:https://www.cnblogs.com/wxwhnu/p/11434341.html
Copyright © 2020-2023  润新知