题解 | #判断二叉树是否对称#

判断二叉树是否对称

http://www.nowcoder.com/practice/1b0b7f371eae4204bc4a7570c84c2de1

非递归思路

对于前序遍历:根节点=》左子树=》右子树
若需要判断对称性,那么可以修改前序遍历的方式,即:
①根节点=》左子树=》右子树
②根节点=》右子树=》左子树
①和②采取非递归的方式同步推进,研究中间每个节点是否对称

对于如何同步推进,可以采取以其中一个的前序遍历为主推进,研究另一个是否能同步对称推进

代码实现

 bool isSymmetric(TreeNode* root) {
        // write code here

        stack<TreeNode*> stk1,stk2;//栈
        TreeNode* p1=root;
        TreeNode* p2=root;//两个指针

        while(p1!=NULL || stk1.empty()==false)  //主框架按照前序遍历进行
        {

            if(p1!=NULL) 
            {
                if(p2==NULL)  //发生了不对称
                    return false;
                //开始研究两个对称点是否相等
                if(p1->val!=p2->val)
                    return false;
                //将访问到的存入stack中
                stk1.push(p1);
                stk2.push(p2);
                p1=p1->left;  //一个往左边下降
                p2=p2->right;  //一个往右边下降


            }
            else
            {
                if(p2!=NULL)
                    return false;  //发生了不对称性
                p1=stk1.top()->right;//p1转移到没有访问的右边
                if(stk2.empty()==true)
                    return false;  //stk2已经访问完
                p2=stk2.top()->left;//p2转移到没有访问的左边
                stk1.pop();
                stk2.pop();


            }


        }

        return true;

    }
全部评论

相关推荐

牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务