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


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

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

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

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

    /*
    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;
        }
    };
    

      

  • 相关阅读:
    RecyclerView的万能适配器+定义可以到底部自动刷新的RecyclerView
    Material Design 摘要
    模版方法模式
    工厂方法模式
    单例模式
    Android中使用Intent和IntentFilter进行通信
    Json/XML/HTML数据解析
    Java中集合总结
    重构笔记
    Android中ActionBar的使用
  • 原文地址:https://www.cnblogs.com/littleswan/p/12425427.html
Copyright © 2020-2023  润新知