• 剑指offer-对称的二叉树


     

    题目描述

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

    解题思路

    注意到二叉树的前序遍历是从根节点开始,先遍历左子树再遍历右子树,由此可定义一种遍历顺序:先遍历根节点,再遍历右子树,最后是左子树,不妨称之为右序遍历。若该二叉树是对称的,那么意味着前序遍历的节点顺序与右序遍历应完全相同,包括所有指向NULL的子节点。因此可从根节点开始,递归的同时用两种顺序遍历二叉树,若遇到两节点都不为空,则判断两节点指向的值是否相同,不相同就返回false,相同的话再次递归向下分别进行遍历;若遇到两节点其中一个为NULL,说明不对称返回false;若遇到两节点都为NULL,返回true。

    代码

     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 Symm(pRoot,pRoot);
    16     }
    17     bool Symm(TreeNode* t1,TreeNode* t2){
    18         if(t1&&t2){
    19             if(t1->val!=t2->val)
    20                 return false;
    21             else
    22                 return Symm(t1->left,t2->right)&&Symm(t1->right,t2->left);
    23         }
    24         else if((t1&&!t2)||(!t1&&t2))
    25             return false;
    26         else
    27             return true;
    28     }
    29 };
  • 相关阅读:
    CR655 题解
    International Master 计划试题乱做 part1
    CR604 题解
    用js做分页,点击下一页时,直接跳到了最后一页——Number()的妙用
    RabbitMQ生产者消费者模型(二)
    线程的状态(二)
    Python服务端测试开发训练营
    RabbitMQ环境搭建(一)
    RabbitMQ死信队列机制(七)
    RabbitMQ限流机制(五)
  • 原文地址:https://www.cnblogs.com/wmx24/p/8806255.html
Copyright © 2020-2023  润新知