美文网首页
对称二叉树

对称二叉树

作者: 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