子树
来源:互联网 发布:淘宝怎么货到付款手机 编辑:程序博客网 时间:2024/04/29 04:34
有两个不同大小的二进制树: T1
有上百万的节点; T2
有好几百的节点。请设计一种算法,判定 T2
是否为 T1
的子树。
注意事项
若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。
样例
下面的例子中 T2 是 T1 的子树:
1 3 / \ / T1 = 2 3 T2 = 4 / 4
下面的例子中 T2 不是 T1 的子树:
1 3 / \ \T1 = 2 3 T2 = 4 /
4
解题思路:因为数据很水,直接运用以前两树进行匹配的代码,边搜索边匹配,并用flag进行标记,如果成功就跳出,注意一下特殊情况,级T1和T2是空树的情况即可。
class Solution {public: /** * @param T1, T2: The roots of binary tree. * @return: True if T2 is a subtree of T1, or false. */ bool ans=1,Ans=0; bool same(TreeNode *a,TreeNode *b){ if(ans==0)return 0; if(a!=NULL&&b!=NULL){ if(a->val!=b->val){ ans=0; return 0; } else { same(a->left,b->left); same(a->right,b->right); return ans; } } if(a!=NULL&&b==NULL){ans=0;return 0;} if(b!=NULL&&a==NULL){ans=0;return 0;} return ans; } bool dfs(TreeNode *T1,TreeNode *T2){ if(T1==NULL)return Ans; ans=1; if(same(T1,T2))Ans=1; if(Ans==1)return Ans; dfs(T1->left,T2); dfs(T1->right,T2);} bool isSubtree(TreeNode *T1, TreeNode *T2) { // write your code here if(T2==NULL)return 1;if(T1==NULL)return 0; return dfs(T1,T2); }};
0 0
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 子树
- 189. Rotate Array
- L2-019. 悄悄关注
- SQL语句俩大类,一类:增,删,改,一类:查询
- shell基础(四)
- [Unity&UI&NGU][UGUI]如何新建一个像《守望先锋》消息的信息框
- 子树
- 基础知识—数据类型-变量
- Uva-1339 Ancient Cipher
- HttpUrlConnection
- tensorflow40《TensorFlow实战》笔记-08-01 TensorFlow实现深度强化学习-策略网络 code
- tensorflow41《TensorFlow实战》笔记-08-02 TensorFlow实现深度强化学习-估值网络 code
- SlidingMenu侧滑简单实现
- 【leetcode】删除数组中指定要求的重复的数字
- [USACO]最短网络