美文网首页
对称二叉树

对称二叉树

作者: UAV | 来源:发表于2020-06-23 21:20 被阅读0次

题目描述

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
思路:如果二叉树为镜像二叉树,则遍历:(根,左结点,右结点 ) 与 (根,右结点,左结点)遍历顺序相同,否则不是镜像二叉树。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    bool isSymmetrical(TreeNode* pRoot)
    {
        if (pRoot == NULL) {
            return true;
        }
        vector<int>left;
        vector<int>right;
        leftProOrder(pRoot,left);
        rightProOrder(pRoot,right);
        if (left == right) {
            return true;
        }
        else
        {
            return false;
        }
    }
    //根、左、右
    void leftProOrder(TreeNode* pRoot, vector<int>&data) {
        if (pRoot == NULL) {
            /*
            这里添加元素是用来记录空结点的位置,用来对比确定是否为镜像二叉树
            */
            data.push_back(0);
            return;
        }
        data.push_back(pRoot->val);
        leftProOrder(pRoot->left,data);
        leftProOrder(pRoot->right, data);
    }
    //根、右、左
    void rightProOrder(TreeNode* pRoot, vector<int>&data) {
        if (pRoot ==NULL) {
            /*
            这里添加元素是用来记录空结点的位置,用来对比确定是否为镜像二叉树
            */
            data.push_back(0);
            return;
        }
        data.push_back(pRoot->val);
        rightProOrder(pRoot->right,data);
        rightProOrder(pRoot->left,data);
    }
};

如果遍历时poot==NULL时,集合中不添加元素,则无法判断二叉树左右结点的位置,如下图:


相关文章

网友评论

      本文标题:对称二叉树

      本文链接:https://www.haomeiwen.com/subject/csdkfktx.html