博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 951. Flip Equivalent Binary Trees
阅读量:6466 次
发布时间:2019-06-23

本文共 1396 字,大约阅读时间需要 4 分钟。

方法一:递归

树的题,大部分都是递归。这道题的话,和same tree很像,无非就是加个判断看看是不是翻转的。

时间复杂度:T(n) = 4T(n/2), by Master Theorem, 时间复杂度 O(n^2)

空间复杂度:O(h)

class Solution {public:    bool flipEquiv(TreeNode* root1, TreeNode* root2) {        if (root1==NULL && root2==NULL) return true;        if (root1==NULL || root2==NULL) return false;                // here root1 not null, root2 not null        if (root1->val!=root2->val) return false;                return flipEquiv(root1->left, root2->left) && flipEquiv(root1->right, root2->right)            || flipEquiv(root1->left, root2->right) && flipEquiv(root1->right, root2->left);    }};

 

方法二:Serialize Tree

Serialize Tree方法很多,可以参考那一道题。这里就用preorder。

考虑到翻转,所以序列化的时候,dfs的时候,左右儿子中val小的先遍历,这样就算有翻转的情况,最后serialize的结果也是一样的。

class Solution {public:    bool flipEquiv(TreeNode* root1, TreeNode* root2) {        return serialize(root1)==serialize(root2);    }        string serialize(TreeNode *root){        if (root==NULL) return "#";                string res=to_string(root->val);        int left_val=root->left!=NULL?root->left->val:-1;        int right_val=root->right!=NULL?root->right->val:-1;        if (left_val
left) + ' ' + serialize(root->right); else res += ' ' + serialize(root->right) + ' ' + serialize(root->left); return res; }};

时间复杂度:和遍历树类似,O(n)

空间复杂度:serialize后字符串需要占空间。

转载于:https://www.cnblogs.com/hankunyan/p/10117408.html

你可能感兴趣的文章
Q:图像太大,在opencv上显示不完全
查看>>
利用ItextPdf、core-renderer-R8 来生成PDF
查看>>
NavigationController的使用
查看>>
多线程编程之Windows环境下创建新线程
查看>>
Unity3D NGUI 给button按钮添加单间事件
查看>>
密码的校验.大小写字母,数字,特殊字符中的至少3种
查看>>
ios 不同sdk4.3 6.0版本号,关于方法的兼容性的通用方法
查看>>
js滚动加载到底部
查看>>
Virtualbox 虚拟机网络不通
查看>>
memcache数据库和redis数据库的区别(理论)
查看>>
我的友情链接
查看>>
MyBatis+Spring结合
查看>>
Office 365之SkyDrive Pro
查看>>
Java Web 高性能开发
查看>>
Scala之柯里化和隐式转换
查看>>
健忘的正则
查看>>
[转]CMake快速入门教程:实战
查看>>
IntelliJ IDEA创建JavaWeb工程及配置Tomcat部署
查看>>
Markdown用法
查看>>
轮播插件swiper.js?
查看>>