面试题59:对称的二叉树

来源:互联网 发布:怎么举报淘宝刷假单 编辑:程序博客网 时间:2024/05/19 01:06


题目:请实现一个函数,用来判断一颗二叉树是不是对称的。如果一颗二叉树和它的镜像一样,那么就是对称的。


思路:通常前序遍历的时候遍历根节点然后遍历左子树在遍历右子树,定义另一种遍历算法,遍历完根节点之后先遍历右子树,在遍历左子树,判断遍历的结果是否一样,如果一样就是对称的。


            8  

     6            6

5      7     7       5

前序遍历:8 6 5 7 6 7 5

新的遍历算法遍历之后为:8 6 5 7 6 7 5 

所以是对称的


            8  

     6            9

5      7     7       5

前序遍历:8 6 5 7 9 7 5

新的遍历算法遍历之后为:8 9  7 5 6 7 5

两次遍历结果不一样,所以不是对称的


            7  

     7           7

7      7     7       

前序遍历:7 7 7 7 7 7 ,考虑null时为 7 7 7 NULL NULL 7 NULL NULL 7 7 NULL NULL NULL

新的遍历算法遍历之后为:7 7 7 7 7 7 ,为了区分,将NULL也加上,7 7 NULL  7  NULL NULL 7 7 NULL NULL 7 NULL NULL

遍历结果也不一致,所以不对称



struct BTNode    {        int value;        BTNode* left;        BTNode* right;  };bool isSymmetrical(BTNode * node1,BTNode * node2){if(node1==NULL&&node2==NULL)return true;//如果有一个为空if(node1==NULL||node2!=NULL)return false;//如果两个结点值不一致返回falseif(node1->value!=node2->value)return false;//node1遍历左子树与node2遍历右子树相比,然后node1遍历右子树与node2遍历左子树相比return isSymmetrical(node1->left,node2->right)&&isSymmetrical(node1->right,node2->left);}bool isSymmetrical(BTNode * root){return isSymmetrical(root,root);}



    

0 0
原创粉丝点击