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

    这道题的核心是从两边往中间进行作比较。

    由题目我们可以知道除了最开始的根节点之外,剩余的节点都需要进行比较,每次进行比较的个数都是两个,

    所以我们可以使用栈对这个二叉树进行操作。

    每次压栈的都是对称的两个节点。

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    #include<stack>
    class Solution {
    public:
        bool isSymmetrical(TreeNode* pRoot)
        {
            if(pRoot == NULL) return true;
            stack<TreeNode *> s ;
            s.push(pRoot->left);
            s.push(pRoot->right);
            while(!s.empty()) {
                TreeNode *right = s.top();//成对取出
                s.pop();
                TreeNode *left = s.top();
                s.pop();
                if(left == NULL && right == NULL) continue;
                if(left == NULL || right == NULL) return false;
                if(left->val != right->val) return false;
                //成对插入
                s.push(left->left);
                s.push(right->right);
                s.push(left->right);
                s.push(right->left);
            }
            return true;
        }
    };
    

      

  • 相关阅读:
    深入理解HTTP协议及原理分析
    如何提高php应用的性能?
    PHP的网站主要攻击方式有哪些?
    五种常见的 PHP 设计模式
    排序算法之插入排序类
    排序算法之交换排序类
    Redis之Zset
    Redis之Set
    Redis之List
    Redis之Hash
  • 原文地址:https://www.cnblogs.com/littleswan/p/12425427.html
Copyright © 2011-2022 走看看