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

      

  • 相关阅读:
    算法(第四版)2.1 初级排序算法
    数据类型:数值
    数据类型:null, undefined 和布尔值
    数据类型:概述
    9.6 http中间件
    9.5 处理http 请求
    9.4 简单httpserver
    9.3 多客户端TCP
    9.2 udp server
    资源竞争
  • 原文地址:https://www.cnblogs.com/littleswan/p/12425427.html
Copyright © 2011-2022 走看看