题解 | #对称的二叉树#

对称的二叉树

https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return bool布尔型
     */
    bool doublebianli(TreeNode* lefto, TreeNode* righto)
    {
        static bool ans = true;
        if (!lefto->left && righto->right || lefto->left && !righto->right)
        {
            ans = false;
            cout<<"leftout";
        }
        if (!lefto->right && righto->left || lefto->right && !righto->left)
        {
            ans = false;
            cout<<"rightout";
        }
        if (lefto->val != righto->val)
        {
            ans = false;
            cout<<"valueout";
        }
        
        if (lefto->left && righto->right)
            doublebianli(lefto->left,righto->right);
        if (lefto->right && righto->left)
            doublebianli(lefto->right, righto->left);
        return ans;
    }


    bool isSymmetrical(TreeNode* pRoot) {
        
        if(pRoot)
        {
            if(pRoot->left&&pRoot->right)
           return doublebianli(pRoot->left,pRoot->right);
        if (!pRoot->right && pRoot->left || pRoot->right && !pRoot->left)
        return false;


        }
        cout<<"out2";
        return true;




    }
};

想复杂了,同时进行前序遍历,并且要需要异或判断,因为,左节点和右节点可以同时为0,可以同时为1,但不能一个有,一个没有,这个就是异或运算,只要异或出来为1就不行.这里有异或的逻辑表达式.!&&||&&!为异或.

其实可以中序遍历在数组中,然后对称的相减.全部为0就是对称的

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务