题解 | #对称的二叉树#

对称的二叉树

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) {
    }
};
*/
#include <cstddef>
#include <stack>
class Solution {
public:
    bool isSymmetrical(TreeNode* pRoot) {
        //同时遍历左右两颗二叉树(如果左右两颗二叉树都不为空树),判断其是否相等
        if(pRoot==nullptr)
            return true;
        TreeNode* bt2;
        TreeNode* bt1;

        stack<TreeNode*> s1;
        stack<TreeNode*> s2;

        bt2=pRoot->right;
        bt1=pRoot->left;
		
	  	//先排除有子树为空树的情况
        if(bt1==nullptr&&bt2!=nullptr)
            return false;
        if(bt2==nullptr&&bt1!=nullptr)
            return false;

		//遍历左子树,顺便对称遍历右子树
        while(!s1.emptysunbit1!=nullptr)
        {
            while(bt1!=nullptr)
            {
			  //判断遍历到的结点是否相等
                if(bt2==nullptr||bt1->val!=bt2->val)
                    return false;
                s1.push(bt1);
                s2.push(bt2);

                bt1=bt1->left;
                bt2=bt2->right;
            }

		  //注意,循环出来的那一次也要判断是否相等
            if(bt2!=nullptr)
                return false;

            if(!s1.empty())
            {
                bt1=s1.top();
                bt2=s2.top();
                s1.pop();
                s2.pop();
                bt1=bt1->right;
                bt2=bt2->left;
            }
        }
        return true;

    }
   

};

全部评论

相关推荐

季桑陌:这怎么看是不是外包啊
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务