博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode_951. Flip Equivalent Binary Trees_二叉树遍历
阅读量:6420 次
发布时间:2019-06-23

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

判断两棵二叉树是否等价:若两棵二叉树可以通过任意次的交换任意节点的左右子树变为相同,则称两棵二叉树等价。

 

思路:遍历二叉树,判断所有的子树是否等价。

struct TreeNode{    int val;    TreeNode *left;    TreeNode *right;    TreeNode(int x)        : val(x), left(NULL), right(NULL) {}};class Solution{public:    void exchangeSons(TreeNode* root)    {        TreeNode* tmp = root->left;        root->left = root->right;        root->right = tmp;    }    int getNum(TreeNode* node)    {        if(node == NULL)            return -1;        else            return node->val;    }    int compareSons(TreeNode* root1, TreeNode* root2)    {        TreeNode* left1 = root1->left;        TreeNode* right1 = root1->right;        TreeNode* left2 = root2->left;        TreeNode* right2 = root2->right;        int l1,l2,r1,r2;        l1 = getNum(left1);        l2 = getNum(left2);        r1 = getNum(right1);        r2 = getNum(right2);        if(l1 == l2 && r1 == r2)            return 1;        else if(l1 == r2 && r1 == l2)            return 2;        else            return 0;    }    bool flipEquiv(TreeNode* root1, TreeNode* root2)    {        if(root1 == NULL && root2 == NULL)            return 1;        else if(root1 == NULL)            return 0;        else if(root2 == NULL)            return 0;        int comres = compareSons(root1, root2);        if(comres == 0)            return 0;        else if(comres == 2)            exchangeSons(root2);        bool leftEquiv = 1,rightEquiv = 1;        if(root1->left != NULL)            leftEquiv = flipEquiv(root1->left, root2->left);        if(root1->right != NULL)            rightEquiv = flipEquiv(root1->right, root2->right);        if(leftEquiv&&rightEquiv)            return 1;        else            return 0;    }};

 

For a binary tree T, we can define a flip operation as follows: choose any node, and swap the left and right child subtrees.

A binary tree X is flip equivalent to a binary tree Y if and only if we can make X equal to Y after some number of flip operations.

Write a function that determines whether two binary trees are flip equivalent.  The trees are given by root nodes root1 and root2.

 

Example 1:

Input: root1 = [1,2,3,4,5,6,null,null,null,7,8], root2 = [1,3,2,null,6,4,5,null,null,null,null,8,7]Output: trueExplanation: We flipped at nodes with values 1, 3, and 5.

Flipped Trees Diagram

 

Note:

  1. Each tree will have at most 100 nodes.
  2. Each value in each tree will be a unique integer in the range [0, 99].

转载于:https://www.cnblogs.com/jasonlixuetao/p/10078481.html

你可能感兴趣的文章
【转】plist涉及到沙盒的一个问题
查看>>
GNU make manual 翻译( 一百四十五)
查看>>
重构之美-走在Web标准化设计的路上[复杂表单]3 9 Update
查看>>
linux中的优先搜索树的实现--prio_tree【转】
查看>>
重构之美-跨越Web标准,触碰语义网[开门见山:Microformat]
查看>>
git入门与实践【转】
查看>>
WPF 虚拟键盘
查看>>
储存卡无法打开专家教您怎么数据恢复
查看>>
彼得原理
查看>>
如何利用【百度地图API】,制作房产酒店地图?(下)——结合自己的数据库...
查看>>
[20171113]修改表结构删除列相关问题3.txt
查看>>
特征选择
查看>>
在Winform程序中设置管理员权限及为用户组添加写入权限
查看>>
RTMP直播到FMS中的AAC音频直播
查看>>
多能互补提速 加快我国能源转型和现代能源体系建设
查看>>
Redis开发运维实践高可用和集群架构与实践(二)
查看>>
程序员的常见“谎话”:对,这是一个已知 Bug
查看>>
如何侦查SQL执行状态
查看>>
CentOS 7 命令行如何连接无线网络
查看>>
Ubuntu 12.04上享用新版本Linux的功能
查看>>