zoukankan      html  css  js  c++  java
  • LeetCode 101. Symmetric Tree

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

    For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

        1
       / 
      2   2
     /  / 
    3  4 4  3
    

    But the following [1,2,2,null,3,null,3] is not:

        1
       / 
      2   2
          
       3    3
    

    Note:
    Bonus points if you could solve it both recursively and iteratively.

     

    解答:

    使用递归的方法最为方便,每次传入左右两个节点的指针,首先判断是否为空,其次再判断对应节点的数值是否相等,以及递归判断左子树的左子树和右子树的右子树、左子树的右子树以及右子树的左子树

    代码如下:

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     bool isSymmetric(TreeNode* root) {
    13         return isMirror(root, root);
    14     }
    15     bool isMirror(TreeNode* left, TreeNode* right)
    16     {
    17         if (left == nullptr && right == nullptr)
    18             return true;
    19         if (left == nullptr || right == nullptr)
    20             return false;
    21         return (left->val == right->val) && isMirror(left->right, right->left) && isMirror(left->left, right->right);
    22     }
    23 };

    时间复杂度:O(n),n为节点数量,需要遍历所有节点

    空间复杂度:O(n),递归的层数为树的深度,最差的情况下节点的数量就是树的高度,因此平均情况为线性复杂度

  • 相关阅读:
    ArrayList用法
    MessageBox
    将文本文件导入Sql数据库
    在桌面和菜单中添加快捷方式
    泡沫排序
    Making use of localized variables in javascript.
    Remove double empty lines in Visual Studio 2012
    Using Operations Manager Connectors
    Clear SharePoint Designer cache
    Programmatically set navigation settings in SharePoint 2013
  • 原文地址:https://www.cnblogs.com/dapeng-bupt/p/10350802.html
Copyright © 2011-2022 走看看