zoukankan      html  css  js  c++  java
  • 剑指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 };
  • 相关阅读:
    HDU 3874 Necklace 区间查询的离线操作
    POJ 1651 Multiplication Puzzle (区间dp)
    POJ 2528 Mayor's posters(离散+线段树)
    POJ 2886 Who Gets the Most Candies?
    webgl教程
    GL_ARRAY_BUFFER 和 GL_ELEMENT_ARRAY_BUFFER
    几个不错的webgl教程网
    svg图标库
    sublime text nodejs set
    图形学着色器学习
  • 原文地址:https://www.cnblogs.com/wmx24/p/8806255.html
Copyright © 2011-2022 走看看