题解 | #对称的二叉树#

对称的二叉树

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

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    vector<int> vl, vr;
    bool isSymmetrical(TreeNode* pRoot) {
        stack<TreeNode*> sl, sr;
        TreeNode *pl = pRoot, *pr = pRoot;

        while (pl && pr || !sl.empty() && !sr.empty()) {
            while (pl && pr) {
                if (pl->val != pr->val) return false;
                sl.push(pl); sr.push(pr);
                pl = pl->left; pr = pr->right;
            } // traverse till null

            if (pl || pr) return false; // but one not null. false

            if (!sl.empty() && !sr.empty()) {
                pl = sl.top(); pr = sr.top();
                sl.pop(); sr.pop();

                pl = pl->right;
                pr = pr->left;
            }
        }
        
        return true;
    }

};

使用两个指针,加上二叉树的非递归遍历。然后一个按照LMR另一个照RML的顺序进行遍历。如若遇见两者一者为空而另一不是,或者遇见两者都非空却值不相等的情况,则可以判断非对称。否则就可以直言其对称。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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